首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zipfile模块错误:文件不是zip文件

Zipfile模块错误:文件不是zip文件
EN

Stack Overflow用户
提问于 2011-05-25 09:03:55
回答 2查看 14K关注 0票数 4

我有这样的代码:

代码语言:javascript
运行
复制
# 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

这会产生以下错误:

代码语言:javascript
运行
复制
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

有人知道为什么会发生这个错误吗?

EN

Stack Overflow用户

发布于 2012-10-10 08:14:41

比显式file.close()更好的风格是使用with-style上下文处理程序(从v2.7开始受zipfile支持),这带来了更优雅的习惯用法,其中您永远不会忘记隐式close()

顺便说一句,永远不要命名像file这样的局部变量,这可能会遮蔽全局变量,并给出非常奇怪的调试行为。

所以,就像这样:

代码语言:javascript
运行
复制
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
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6118505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档