簡體   English   中英

Python-Windows最大目錄路徑長度的解決方法

[英]Python - Windows maximum directory path length workaround

問題是使用os.makedirs()創建多個目錄時Windows中路徑的字符限制

我在發布此內容之前搜索我的問題時發現了這篇文章:

python win32文件名長度解決方法

現在選擇的答案提出了前綴解決方法,但是我的問題是,有沒有辦法確保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)))

(代替path.split('/'),您也可以使用此處描述方法使其在所有操作系統上均可工作)

您需要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM