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!

ohho
źródło
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.

Steven T. Snyder
źródło
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)
Tim Pietzcker
źródło
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.

Max Shawabkeh
źródło
-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

Bloeper
źródło