[英]Python - Windows maximum directory path length workaround
問題是使用os.makedirs()
創建多個目錄時Windows中路徑的字符限制
我在發布此內容之前搜索我的問題時發現了這篇文章:
現在選擇的答案提出了前綴解決方法,但是我的問題是,有沒有辦法確保Windows和UNIX中的功能?
我想到的另一種方法是一個接一個地創建文件夾,然后創建文件,這樣您就不會超過路徑長度,但是我無法弄清楚代碼中明顯的錯誤。
path = ['folder1/s1/s1/abc.txt',
'folder1/s1/s2/def.txt']
def makedirs(path):
explode = path.split('/')
for i in range(len(explode)-1):
os.mkdir(explode[i])
os.chdir(explode[i])
if i == len(explode) -2:
download_file(explode[i+1])
# something to go back here
os.chdir('../' * (len(explode)-3)) # ??
makedirs(path[0])
現在這僅適用於第一行,因為我不知道如何返回到根目錄或重置它。 如果沒有“重置”,則文件夾彼此位於下面:
folder1/s1/s1/folder1/s1/s1/abc.txt
(或類似名稱)
我可以設置從根到根的路徑來重置它,但是然后我們可能會遇到達到最大長度的相同問題。 任何有關如何在兩個操作系統上都能正常工作的幫助將不勝感激!
請隨時指出我錯了。
根據這個stackoverflow的答案 :雖然chdir可以使用os.chdir(“ ..”)進入一個目錄,但與平台無關的方式是: os.chdir(os.pardir)
。
循環調用N次;
或嘗試像這樣的未讀單線(未試用):
os.chdir(os.path.join(*([os.pardir] * NUM_TIMES)))
您需要使用unc path和unicode文件名,但是並不是所有的python函數都知道這一點,os.mkdir可以工作,而os.makedirs不能。
import os
path = u'\\\\?\\c:\\'
for i in xrange(1000):
path += u'subdir\\'
os.mkdir(path)
但是最好也提供刪除它們的代碼,Windows資源管理器無法刪除
import os
path = u'\\\\?\\c:\\'
for i in xrange(1000, 0, -1):
try:
os.rmdir(path + (u'subdir\\' * i))
except:
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.