压缩文件时出现Python错误,“L”格式要求0<=number<=4294967295

2024-04-27 21:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行这个代码压缩文件夹和文件。在

def save_folder_as_zip(self, folder_to_zip, save_as):
    zipf = zipfile.ZipFile(str(save_as), mode="w", allowZip64=True)
    self.create_zip(zipf, folder_to_zip)
    zipf.close()

    return zipf

def create_zip(self, zipf, directory, folder=""):

    directory = directory.encode("utf-8")

    for item in os.listdir(directory):
        if temp_folder == directory + os.sep:
            continue

        try:
            if os.path.isfile(os.path.join(directory, item)):
                zipf.write(os.path.join(directory, item), folder + os.sep + item)
            elif os.path.isdir(os.path.join(directory, item)):
                self.create_zip(zipf, os.path.join(directory, item).decode("utf-8"), folder + os.sep + item)
        except Exception, e:
            self.schedule.machine.log_warning(str(e))

但是我得到了一个错误:

^{pr2}$

出现这种情况的文件名示例:

/[Wii]TrackMania[PAL][WiiSOS.com]/ws_tramap.iso

有什么办法解决这个问题吗?在

回溯:

Traceback (most recent call last):
File "test.py", line 29, in <module>
   save_folder_as_zip("/Users/f/Downloads/", "hei.zip")
File "test.py", line 13, in save_folder_as_zip
   create_zip(zipf, folder_to_zip)
File "test.py", line 26, in create_zip
   create_zip(zipf, os.path.join(directory, item).decode("utf-8"), folder + os.sep + item)  
File "test.py", line 24, in create_zip
   zipf.write(os.path.join(directory, item), folder + os.sep + item)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 1100, in write
   zinfo.file_size))
struct.error: 'L' format requires 0 <= number <= 4294967295

Tags: pathinselfossaveascreatefolder
1条回答
网友
1楼 · 发布于 2024-04-27 21:45:36

我认为应用此缺陷报告附带的补丁可以修复:

http://bugs.python.org/issue9720

当您试图包含在zip文件中的文件以原始格式或压缩格式大于2^32-1字节时,就会出现问题。在这种情况下,库需要将-1存储为文件大小/压缩大小,并且必须分配一些额外的字段来存储实际大小,这不适合32位dword。在

由于某些原因,这个补丁在3.2或2.7.2+中没有被接受,但是我已经测试过了,它可以正常工作。我认为writestr()方法不能修复某些角落的大小写,但是如果只使用write()来存储文件,它的效果非常好。在

相关问题 更多 >