1

問題は、pythonsを使用して複数のディレクトリを作成するときのWindowsのパスの文字制限ですos.makedirs()

これを投稿する前に問題を検索したときに、この投稿を見つけました。

python win32 ファイル名の長さの回避策

選択された回答はプレフィックスの回避策を示唆していますが、ここでの私の質問は、Windows と UNIX で機能を確保する方法はありますか?

私が考えたもう 1 つの方法は、フォルダーを 1 つずつ作成してから、パスの長さを超えないようにファイルを作成することでしたが、コードの明らかなバグがわかりません。

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(またはそのようなもの)

ルートからのパスを設定してリセットすることはできましたが、最大長に達するという同じ問題が発生する可能性があります。両方のOSでこれを機能させる方法についての助けをいただければ幸いです!

私が間違っているところを指摘してください。

4

2 に答える 2

2

unc パスと 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
于 2012-08-19T01:48:36.937 に答える
1

このstackoverflowの回答によると:chdirはos.chdir( "..")で1つのディレクトリに移動できますが、プラットフォームに依存しない方法は次のとおりですos.chdir(os.pardir)

これをループで N 回呼び出します。
または、次のような判読できないワンライナーを試してください(テストされていません):
os.chdir(os.path.join(*([os.pardir] * NUM_TIMES)))

(path.split('/') の代わりに、ここで説明されている方法を使用して、すべてのオペレーティング システムで動作することもできます)

于 2012-08-18T23:32:10.163 に答える