Python克服Windows 255路径+;文件名限制并归档目录
我将用Python备份位于Windows7机器中的目录。我需要尽可能地压缩它。我还没有决定哪种方式进行压缩 主要问题是目录中包含数百个级联文件/目录,因此路径+文件名总共255个字符后,我看不到目录的内部。此目录结构由第三方软件创建 为了快速测试,我编写了以下文件夹生成(模拟) 导致Python克服Windows 255路径+;文件名限制并归档目录,python,unicode,archive,Python,Unicode,Archive,我将用Python备份位于Windows7机器中的目录。我需要尽可能地压缩它。我还没有决定哪种方式进行压缩 主要问题是目录中包含数百个级联文件/目录,因此路径+文件名总共255个字符后,我看不到目录的内部。此目录结构由第三方软件创建 为了快速测试,我编写了以下文件夹生成(模拟) 导致 Total Size is 0 bytes ('Total Files ', 0) ('Total Folders', 9) 无论测试文件夹中有多少文件夹。有趣的是,我可以浏览和创建
Total Size is 0 bytes
('Total Files ', 0)
('Total Folders', 9)
无论测试文件夹中有多少文件夹。有趣的是,我可以浏览和创建新的文件夹后,9。文件夹通过浏览器无缝
我不太喜欢wind0z,因此如果有经验的用户能帮助我克服这个问题,我将不胜感激
只需归档一个很长的目录。如果这是主要问题,则使用subst可能会超出限制 看看这个: 如何在Python中使用unicode(它谈论255个限制)—— -请注意Unicode部分…它解释了Windows API的Unicode版本有更高的限制-以及如何启用此限制 再看看这个: 看看这个讨论-
除此之外,如果工作是你必须完成的,而这不是为了你自己的学习和娱乐,我可以告诉你,有更好的解决方案来支持你需要的东西,而不是让你从头开始创造自己的东西。谢谢你的指点。但是,我无法在Python中使用“\\?\”工作。如果存在长度超过260限制的文件,则必须是unicode,然后通过unicode直接读取应该可以解决问题?subst将为超出260限制的文件夹分配未使用的驱动器号。我认为它不适合这样的情况,那里有大量的级联文件夹/目录。仍然在寻找Python的解决方法。以前没有遇到过这个问题…做了一点谷歌搜索,这似乎是许多不得不处理它的人的一个主要问题。。。请看,我们对此进行了讨论。他们甚至发布了一些函数的变体来缩短文件名(def shorten_file_name)…他们似乎最终让它工作起来了。如果您需要旧路径,我建议您在文件系统中运行并记录一个带有键值记录的csv文件,其中您将文件的所有路径保存的长度超过240个字符…然后运行脚本缩短文件名…这听起来需要做很多工作,为整个文件系统编制索引,而不是原始读取文件。。。我不能缩短文件名或文件夹名。
The filename or extension is too long.
Traceback (most recent call last):
File "folder_generate.py", line 21, in <module>
os.chdir(root_dir + "\\" + str(iterate))
WindowsError: [Error 2] The system cannot find the file specified: 'c:\\Python27
\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUV
WXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQR
STUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ABCDEFGHIJKLMN
OPQRSTUVWXYZ'
fileList = []
fileSize = 0
folderCount = 0
rootdir = "c:\\test"
for root, subFolders, files in os.walk(rootdir):
folderCount += len(subFolders)
for file in files:
f = os.path.join(root,file)
fileSize = fileSize + os.path.getsize(f)
fileList.append(f)
print("Total Size is {0} bytes".format(fileSize))
print("Total Files ", len(fileList))
print("Total Folders", folderCount)
Total Size is 0 bytes
('Total Files ', 0)
('Total Folders', 9)