2011-03-06 60 views
18

這裏優雅的方式有四條路徑:,使所有迪爾斯在路徑

p1=r'\foo\bar\foobar.txt' 
p2=r'\foo\bar\foo\foo\foobar.txt' 
p3=r'\foo\bar\foo\foo2\foobar.txt' 
p4=r'\foo2\bar\foo\foo\foobar.txt' 

的目錄可能會或可能不會在驅動器上存在。什麼是最優雅的方式來創建每個路徑中的目錄?

我在考慮在循環中使用os.path.split(),並檢查os.path.exists的目錄,但我不知道它有更好的方法。

+0

差不多:https://stackoverflow.com/q/6004073/1959808 –

回答

33

您正在尋找os.makedirs(),它完全符合您的需求。

的文檔狀態:

遞歸目錄創建功能。 與mkdir()類似,但使所有 中間級目錄需要 來包含葉目錄。如果葉子 目錄已存在或不能創建 ,則引發 錯誤異常。

因爲它失敗了,如果葉目錄已經存在,你會想要在調用os.makedirs()之前測試存在。

+0

大聲笑。 1:0爲Python。不能相信我錯過了,而且我一直在使用'os.mkdir()'。謝謝,大衛:) – marw

+0

@marw我從來沒有聽說過它,我只是做了一個神奇的關鍵詞「遞歸」的網絡搜索! –

+2

存在測試引入了可能的競爭條件(在您調用'makedirs()'之前,*在*之前測試了它的存在之後,可能會創建目錄*)。所以只需使用'try:..除了OSError'外沒有測試。 – jfs

1

關於Python 3.6或更高版本,你可以這樣做:

import pathlib 

path = pathlib.Path(p4) 
path.parent.mkdir(parents=True, exist_ok=True) 
+2

pathlib模塊需要宣傳活動。太棒了。 –

+0

@RickTeachey不能同意更多 – axwell