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
任何人都知道为什么这个错误发生?
答
更好的款式比明确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
回滚最后的编辑,因为有人已经编辑了整个问题与答案取而代之。 – Dhara 2015-12-16 10:15:47