2013-09-28 14 views
11

Mam do czynienia z bardzo podstawowym problemem przy użyciu ścieżki do katalogu w skrypcie Pythona. Kiedy robię kopiowanie ścieżki z Eksploratora Windows, używa on odwrotnego ukośnika jako separatora ścieżki, który powoduje problem.Ścieżka ścieżki okna Pythona

>>> x 
'D:\testfolder' 
>>> print x 
D:  estfolder 
>>> print os.path.normpath(x) 
D:  estfolder 
>>> print os.path.abspath(x) 
D:\  estfolder 
>>> print x.replace('\\','/') 
D:  estfolder 

Czy ktoś może mi pomóc to naprawić.

+0

Ukośniki naprzód są rozumiane we wszystkich systemach - ale "normpath" w systemie Windows używa '\\'. Osobiście uważam, że najłatwiej jest używać metod 'path' do łączenia/zarządzania ścieżkami, a następnie do zamiany z' \\ 'na'/', aby był spójny w różnych systemach. Nie jestem pewien, czy to odpowiada twojemu Q? – Basic

+4

można dodać r przed tym ciągiem, na przykład x = r'D: \ testfolder ', a x będzie "D: \ testfolder". dodanie "r" przed ciągiem pokazuje, że ten ciąg jest nieprzetworzonym łańcuchem znaków. – Mark

Odpowiedz

12

Python interpretuje \t w łańcuchu jako znak tabulacji; dlatego też, jak zauważyłeś, wydrukuje sięz zakładką pomiędzy : i e. Jeśli chcesz rzeczywiste backslash, trzeba ucieczki odwrotny ukośnik wprowadzając go jako \\:

>>> x = "D:\\testfolder" 
>>> print x 
D:\testfolder 

Jednak dla kompatybilności między platformami, należy prawdopodobnie użyć os.path.join. Myślę, że Python w systemie Windows automatycznie poprawnie obsłuży również ukośniki (/).

+7

Tylko użycie ukośników będzie działało pod oknami - "os.path.join()" jest oczywiście najsilniejszym rozwiązaniem. –

+9

Alternatywnie, możesz użyć [raw literal] (http://docs.python.org/2/reference/lexical_analysis.html#string-literals) przez prefiksowanie 'r', aby sekwencje specjalne nie były interpretowane, np. 'r" D: \ testfolder "'. –

+2

@AdamRosenfield Ciągi raw nie są odpowiednie dla ścieżki Windows. https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/ –

Powiązane problemy