Python – Windows最大目录path长度解决方法

问题是使用os.makedirs()创build多个目录时窗口中path的字符限制os.makedirs()

在发布之前,我在search我的问题时发现了这个post:

pythonwin32文件名长度解决方法

现在select的答案build议前缀解决方法,但我的问题是,有没有办法确保Windows和UNIX的function?

我想到的另一种方法是逐个创build文件夹,然后创build文件,以便永远不会超过path长度,但我无法弄清代码中的明显错误。

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

我可以从根设置path来重置它,但是然后我们可能遇到达到最大长度的相同问题。 任何帮助如何使这两个操作系统的工作将不胜感激!

请随时指出我错在哪里。

Solutions Collecting From Web of "Python – Windows最大目录path长度解决方法"

按照这个stackoverflow的答案 :虽然chdir可以用os.chdir(“..”)上去一个目录,但平台无关的方法是: os.chdir(os.pardir)

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

(而不是path.split('/'),你也可以使用这里描述的方法来在所有操作系统上工作)

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