这将允许您迭代行。它的一部分是从我在answer中找到的一些代码派生出来的。
在这个时间点(pylzma-0.5.0)上,py7zlib模块没有实现允许存档成员作为字节流或字符流读取的API,它的ArchiveFile类只提供一个read()函数,该函数一次解压缩并返回成员中的未压缩数据。考虑到这一点,最好的方法是通过Python生成器将字节或行作为缓冲区迭代返回。
下面是后者,但如果问题是存档成员文件本身太大,则可能没有帮助。
下面的代码应该可以在Python3.x和2.7中使用。import io
import os
import py7zlib
class SevenZFileError(py7zlib.ArchiveError):
pass
class SevenZFile(object):
@classmethod
def is_7zfile(cls, filepath):
""" Determine if filepath points to a valid 7z archive. """
is7z = False
fp = None
try:
fp = open(filepath, 'rb')
archive = py7zlib.Archive7z(fp)
_ = len(archive.getnames())
is7z = True
finally:
if fp: fp.close()
return is7z
def __init__(self, filepath):
fp