Python, dodaj końcowy ukośnik do ciągu katalogu, niezależnie od systemu operacyjnego


114

Jak mogę dodać końcowy ukośnik ( /dla * nix, \dla win32) do ciągu katalogu, jeśli ukośnik kończący już tam nie jest? Dzięki!


8
Powinieneś używać os.pathmodułu ( docs.python.org/library/os.path.html ) zamiast bezpośrednio manipulować napisami . Służy os.path.joindo łączenia składników ścieżki.
kennytm

2
dziękuję Tim za przypomnienie, po przeczytaniu dokumentu myślę, że odpowiedź na moje prawdziwe pytanie to os.path.join (folder, nazwa pliku) i nie muszę się wcale martwić o ukośnik. stary, pokocham Pythona ;-)
ohho

2
Dlatego zapytałem - nie rób tego sam, użyj os.path.joini pozwól bibliotece standardowej znaleźć właściwy separator ścieżki.
Tim Pietzcker

2
@ S.Lott Nie uważam tego za „złe”. pytanie jest samo w sobie ważne. to tylko część większego (można powiedzieć prawdziwego) pytania.
ohho

6
Jednak w zależności od tego, co robisz, pytanie może nadal być interesujące. Na przykład, jeśli używasz Pythona do dostarczania danych wejściowych do innego programu, możesz mieć przypadek, w którym argument wymaga ścieżki zakończonej ukośnikiem. To może być poza twoją kontrolą; i jest doskonale uzasadnionym przypadkiem użycia poniższej odpowiedzi Marco.
Chris Krycho,

Odpowiedzi:


180

os.path.join(path, '') doda końcowy ukośnik, jeśli jeszcze go tam nie ma.

Możesz zrobić os.path.join(path, '', '')lub, os.path.join(path_with_a_trailing_slash, '')a nadal otrzymasz tylko jeden końcowy ukośnik.


2
Dodaje również ukośnik, gdy pathjest to plik, a nie katalog. To trochę niewygodne.
Martin

27

Ponieważ chcesz połączyć katalog i nazwę pliku, użyj

os.path.join(directory, filename)

Jeśli chcesz pozbyć się .\..\..\blah\ścieżek, użyj

os.path.join(os.path.normpath(directory), filename)

11

Możesz to zrobić ręcznie:

path = ...

import os
if not path.endswith(os.path.sep):
    path += os.path.sep

Jednak zwykle jest znacznie czystszy w użyciu os.path.join.


-1

Możesz użyć czegoś takiego:

os.path.normcase(path)
    Normalize the case of a pathname. On Unix and Mac OS X, this returns the path unchanged; on case-insensitive filesystems, it converts the path to lowercase. On Windows, it also converts forward slashes to backward slashes.

W przeciwnym razie możesz poszukać czegoś innego na tej stronie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.