Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python克服Windows 255路径+;文件名限制并归档目录_Python_Unicode_Archive - Fatal编程技术网

Python克服Windows 255路径+;文件名限制并归档目录

Python克服Windows 255路径+;文件名限制并归档目录,python,unicode,archive,Python,Unicode,Archive,我将用Python备份位于Windows7机器中的目录。我需要尽可能地压缩它。我还没有决定哪种方式进行压缩 主要问题是目录中包含数百个级联文件/目录,因此路径+文件名总共255个字符后,我看不到目录的内部。此目录结构由第三方软件创建 为了快速测试,我编写了以下文件夹生成(模拟) 导致 Total Size is 0 bytes ('Total Files ', 0) ('Total Folders', 9) 无论测试文件夹中有多少文件夹。有趣的是,我可以浏览和创建

我将用Python备份位于Windows7机器中的目录。我需要尽可能地压缩它。我还没有决定哪种方式进行压缩

主要问题是目录中包含数百个级联文件/目录,因此路径+文件名总共255个字符后,我看不到目录的内部。此目录结构由第三方软件创建

为了快速测试,我编写了以下文件夹生成(模拟)

导致

     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)