在对unzip(1L)
感到沮丧之后,我一直在尝试创建一个脚本,该脚本将从来自stdin的zip存档中的所有文件中解压缩并打印出原始数据。我目前有以下工作方式:
import sys, zipfile, StringIO
stdin = StringIO.StringIO(sys.stdin.read())
zipselect = zipfile.ZipFile(stdin)
filelist = zipselect.namelist()
for filename in filelist:
print filename, ':'
print zipselect.read(filename)
但是,当我尝试添加验证以检查它是否确实是zip文件时,它并不喜欢它。
...
zipcheck = zipfile.is_zipfile(zipselect)
if zipcheck is not None:
print 'Input is not a zip file.'
sys.exit(1)
...
结果是
File "/home/chris/simple/zipcat/zipcat.py", line 13, in <module>
zipcheck = zipfile.is_zipfile(zipselect)
File "/usr/lib/python2.7/zipfile.py", line 149, in is_zipfile
result = _check_zipfile(fp=filename)
File "/usr/lib/python2.7/zipfile.py", line 135, in _check_zipfile
if _EndRecData(fp):
File "/usr/lib/python2.7/zipfile.py", line 203, in _EndRecData
fpin.seek(0, 2)
AttributeError: ZipFile instance has no attribute 'seek'
我假设它无法搜索,因为它不是文件,这样吗?
抱歉,如果这很明显,这是我第一次使用Python。
最佳答案
您应该将stdin
传递给is_zipfile
,而不是zipselect
。 is_zipfile
采用文件或文件对象的路径,而不是ZipFile
。
见the zipfile.is_zipfile documentation
正确的是ZipFile
不能查找,因为它不是文件。这是一个存档,因此可以包含许多文件。
关于python - 验证来自stdin的zip文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6654940/