zip文件模块错误:文件不是一个zip文件

问题描述:

我有这样的代码:zip文件模块错误:文件不是一个zip文件

# File: zipfile-example-1.py 

import zipfile,os,glob 

file = zipfile.ZipFile("Apap.zip", "w") 

# list filenames 
for name in glob.glob("C:\Users/*"): 
    print name 
    file.write(name,os.path.basename(name),zipfile.ZIP_DEFLATED) 
file = zipfile.ZipFile("Apap.zip", "r") 
for info in file.infolist(): 
    print info.filename, info.date_time, info.file_size, info.compress_size 

产生这个错误:

raceback (most recent call last): 
    File "C:/Users/Desktop/zip.py", line 11, in <module> 
    file = zipfile.ZipFile("Apap.zip", "r") 
    File "C:\Python27\lib\zipfile.py", line 712, in __init__ 
    self._GetContents() 
    File "C:\Python27\lib\zipfile.py", line 746, in _GetContents 
    self._RealGetContents() 
    File "C:\Python27\lib\zipfile.py", line 761, in _RealGetContents 
    raise BadZipfile, "File is not a zip file" 
BadZipfile: File is not a zip file 

任何人都知道为什么这个错误发生?

+0

回滚最后的编辑,因为有人已经编辑了整个问题与答案取而代之。 – Dhara 2015-12-16 10:15:47

你缺少一个

file.close() 
第一 for循环之后

+1

更好的pythonic风格使用'与'(上下文处理程序)。 – smci 2012-10-09 23:45:52

更好的款式比明确file.close()是使用with式的上下文句柄(通过自V2.7压缩文件的支持),为使更优雅的成语,在那里你可以不要忘记隐含close()

由方式,千万不要命名一个局部变量,如file这可能会影响全局变量,并给出非常奇怪的调试行为。

所以,像这样:

import zipfile,os,glob 

with zipfile.ZipFile("Apap.zip", "w") as f:  
    for name in glob.glob("C:\Users/*"): 
     print name 
     f.write(name,os.path.basename(name),zipfile.ZIP_DEFLATED) 
# `with` causes an implicit f.close() here due to its `exit()` clause 

with zipfile.ZipFile("Apap.zip", "r") as f: 
    for info in f.infolist(): 
     print info.filename, info.date_time, info.file_size, info.compress_size