2013-04-15 11 views
89

Napisałem kod w pythonie, który używa/do utworzenia konkretnego pliku w folderze, jeśli chcę użyć kodu w oknach to nie zadziała, czy istnieje sposób, w jaki mogę użyć tego kodu w systemach Windows i Linux .Jak używać "/" (separatora katalogów) w systemie Linux i Windows w języku Python?

W Pythonie Używam tego kodu:

pathfile=os.path.dirname(templateFile) 
rootTree.write(''+pathfile+'/output/log.txt') 

Kiedy używam mojego kodu w Załóżmy okien maszynie mój kod nie zadziała.

Jak używać "/" (separatora katalogu) zarówno w systemie Linux, jak i Windows?

+1

Można zdefiniować go na początku w zależności od Win/* nix, a następnie pracować ze zmienną. – fedorqui

+7

W systemie Windows można użyć \ lub/jako separatora katalogu. – SecurityMatt

+5

System Windows obsługuje '/' w ścieżkach katalogów. Jaki masz konkretny problem? Opublikuj kod ilustrujący problem. –

Odpowiedz

146

Korzystając os.path.join(). Przykład: os.path.join(pathfile,"output","log.txt").

W kodzie, które byłoby: rootTree.write(os.path.join(pathfile,"output","log.txt"))

+0

Ten działa! – hulk007

10

kilka przydatnych linków, które pomoże Ci:

+0

pathsep? Ogólnie przydatna, ale nie tutaj, IMO. – glglgl

+2

@glglgl Rzeczywiście. Szukałem "sep", ale nie mogłem się oprzeć, żeby to opublikować (założyłem, że OP okaże się przydatny do przyszłej pracy) :) – Maroun

28

Można użyć os.sep:

>>> import os 
>>> os.sep 
'/' 
49

Zastosowanie:

import os 
print os.sep 

zobaczyć jak wygląda separator na bieżąco OS.
W kodzie można użyć:

import os 
path = os.path.join('folder_name', 'file_name') 
3

nie budują nazw katalogów i plików siebie, użycie Pythona zawarte bibliotek.

W tym przypadku odpowiednia to os.path. Zwłaszcza sprzężenie, które tworzy nową ścieżkę z katalogu i nazwy pliku lub katalogu i podział, który pobiera nazwę pliku z pełnej ścieżki.

Twój przykład byłoby

pathfile=os.path.dirname(templateFile) 
p = os.path.join(pathfile, 'output') 
p = os.path.join(p, 'log.txt') 
rootTree.write(p) 
10

os.path.normpath (ścieżka) Należy również wspomnieć jak konwertuje/separatory separatory ścieżki w \ w systemie Windows. Zmniejsza także redundantne odniesienia poziomu wyższego, to znaczy A/B i A/foo /../ B i A /./ B wszystkie stają się A/B. A jeśli jesteś Windowsem, wszystkie one stają się A \ B.

+0

To jest IMO najlepsza odpowiedź na pytanie, jak było sformułowane, "jak używać"/"(separator katalogu) w systemie Linux i Windows". I jest to również niezwykle użyteczne - wolałbym raczej użyć 'os.path.normpath (" a/b/c/d/file.ext ") niż' os.path.join ('a', 'b' , 'c', 'd', 'file.ext') ', kiedy muszę określić długą ścieżkę. – ukrutt

1

Jeśli mają szczęście być uruchomiony Python 3.4+, można użyć pathlib:

from pathlib import Path 

path = Path(dir)/subdir/filename # returns a path of the system's path flavour 
Powiązane problemy