2013-04-15 24 views
89

我已經在python中編寫了一個代碼,它使用/在某個文件夾中創建一個特定的文件,如果我想在Windows中使用它的代碼,它將無法工作,有沒有一種方法可以在Windows和Linux中使用代碼。如何在Python和Linux中使用「/」(目錄分隔符)?

在Python中我使用此代碼:

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

當我將用我的假設的Windows機器代碼我的代碼將無法正常工作。

如何在Linux和Windows中使用「/」(目錄分隔符)?

+1

你可以在一開始定義它取決於贏/ * nix中,然後用的變量。 – fedorqui

+7

在Windows中,您可以使用\或/作爲目錄分隔符。 – SecurityMatt

+5

Windows在目錄路徑中支持'/'。你有什麼具體問題?發表一些說明問題的代碼。 –

回答

146

使用os.path.join()。 例如:os.path.join(pathfile,"output","log.txt")

在你的代碼,這將是:rootTree.write(os.path.join(pathfile,"output","log.txt"))

+0

這一個工程! – hulk007

10

一些有用的鏈接,這將有助於你:

+0

pathsep?通常有用,但不在這裏,國際海事組織。 – glglgl

+2

@glglgl確實。我尋找'sep',但無法抗拒我自己也發佈這個(我認爲OP會發現它對未來的工作有用):) – Maroun

28

您可以使用os.sep

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

用途:

import os 
print os.sep 

看看分離器的外觀當前操作系統。
在你的代碼,你可以使用:

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

不要建立目錄和文件名你的自我,使用Python包含的庫。

在這種情況下,相關的是os.path。尤其是連接,它從一個目錄和一個文件名或目錄中創建一個新的路徑名,並從完整路徑中獲取文件名。

你的例子是

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(路徑)也應該被提及的路徑分隔符轉換/成在Windows \分隔符。它也摺疊了多餘的前導參考...即,A/B和A/foo/.../B和A /./B都變成了A/B。如果你是Windows,這些都成爲A \ B。

+0

這是國際海事組織對這個問題的最佳答案,因爲它是在Linux和Windows中「如何使用」/「(目錄分隔符)」。而且它也非常有用 - 我寧願做'os.path.normpath('a/b/c/d/file.ext')''而不是'os.path.join('a','b' ,'c','d','file.ext')'當我需要指定一個長路徑時。 – ukrutt

1

如果你足夠幸運,執行Python 3.4+,您可以使用pathlib

from pathlib import Path 

path = Path(dir)/subdir/filename # returns a path of the system's path flavour 
相關問題