1

问题是使用python创建多个目录时windows中路径的字符限制os.makedirs()

在发布此问题之前,我在搜索我的问题时发现了此帖子:

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(或类似的东西)

我可以设置从根目录的路径来重置它,但是我们可能会遇到同样的问题,即达到最大长度。任何有关如何使其在两个操作系统上工作的帮助都将不胜感激!

请随时指出我错在哪里。

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("..") 上一个目录,但与平台无关的方式是:os.chdir(os.pardir).

在一个循环中调用这个 N 次;
或尝试像这样的不可读的单行(未经测试):
os.chdir(os.path.join(*([os.pardir] * NUM_TIMES)))

(除了 path.split('/'),​​您还可以使用此处描述的方法使其适用于所有操作系统)

于 2012-08-18T23:32:10.163 回答