python zipfile包的一个bug
- zipfile.is_zipfile(filename)
Returns True if filename is a valid ZIP file based on its magic number, otherwise returns False. filename may be a file or file-like object too.
Changed in version 3.1: Support for file and file-like objects.
这是手册中的介绍
python版本 3.3.5
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>>
这是我的代码
def unpack(): BASE_DIR = os.path.abspath(".") TAR_DIR = os.path.join(BASE_DIR, 'tar') tars = map(lambda x: os.path.join(TAR_DIR, x), os.listdir(TAR_DIR)) for x in tars: if tarfile.is_tarfile(x): print(x) #myfile = tarfile.TarFile(x, 'r') #tarfile.TarFile.extractall(myfile, TAR_DIR) elif zipfile.is_zipfile(x): myfile = zipfile.ZipFile(x, 'r') f = myfile.namelist()[0] p = os.path.join(TAR_DIR, f) if not os.path.exists(p): zipfile.ZipFile.extractall(myfile, TAR_DIR)
bug出现的情况: 在测试flup-py3.3-master.zip是否为zifile时, 即zipfile.is_zipfile(x), 出现以下错误
Traceback (most recent call last):File "install.py", line 48, in <module>unpack_install()File "install.py", line 36, in unpack_installif tarfile.is_tarfile(x):File "C:\Python33\lib\tarfile.py", line 2444, in is_tarfilet = open(name)File "C:\Python33\lib\tarfile.py", line 1573, in openreturn func(name, "r", fileobj, **kwargs)File "C:\Python33\lib\tarfile.py", line 1638, in gzopenfileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)File "C:\Python33\lib\gzip.py", line 184, in __init__fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')PermissionError: [Errno 13] Permission denied: 'F:\\dep\\tar\\flup-py3.3-master'shell returned 1
原因是之前已经解压过在它所在的目录.
[待证]更进一步,应该是测试时,使用了当前目录作为试解压的目录. 因为已经有flup-py3.3-master这个目录了.所以错误就出现了.
附下载地址 flup-py3.3-master.zip
2014年10月01日 15:04
不是它想要到普通文件的路径而你给它传了个到目录的路径么?