Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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-压缩文件时出错,';L';格式要求0<;=编号<;=4294967295_Python_Zip_Filenames - Fatal编程技术网

Python-压缩文件时出错,';L';格式要求0<;=编号<;=4294967295

Python-压缩文件时出错,';L';格式要求0<;=编号<;=4294967295,python,zip,filenames,Python,Zip,Filenames,我运行这段代码来压缩文件夹和文件 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, director

我运行这段代码来压缩文件夹和文件

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))
但是我得到了这个错误:

'L' format requires 0 <= number <= 4294967295
有没有办法解决这个问题

回溯:

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
回溯(最近一次呼叫最后一次):
文件“test.py”,第29行,在
将文件夹另存为zip(“/Users/f/Downloads/”,“hei.zip”)
文件“test.py”,第13行,保存在文件夹\u-as\u-zip中
创建\u-zip(zipf,文件夹\u-to \u-zip)
文件“test.py”,第26行,在create_zip中
创建zip(zipf,os.path.join(目录,项目)。解码(“utf-8”),文件夹+os.sep+项目)
文件“test.py”,第24行,在create_zip中
write(os.path.join(目录,项目),文件夹+os.sep+项目)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py”,第1100行,以书面形式
zinfo.file(文件大小)

struct.error:'L'格式需要0我认为可以通过应用附加到此错误报告的修补程序来修复:

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


由于某些原因,该修补程序在3.2或2.7.2+中未被接受,但我已经对其进行了测试,它工作正常。我认为它不能用writest()方法解决一些棘手的问题,但如果您只使用write()来存储文件,它会非常有效

哪一行触发错误?您的文件是否大于4GB?请粘贴完整的回溯。压缩的目录总容量为6GB,但示例中的文件大约为1GB。请用完整的回溯更新您的原始帖子。目录中没有其他超过4GB的文件?我认为这与。如果是的话,如果不接触zipfile.py,您可能无法解决您的问题。。。
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