我想从一个7z压缩的csv(文本)文件中逐行读取(在Python2.7中)。我不想解压缩整个(大)文件,而是流式传输行。
我试过了 pylzma.decompressobj()
没有成功。我得到一个数据错误。请注意,此代码尚未逐行读取:
input_filename = r"testing.csv.7z"
with open(input_filename, 'rb') as infile:
obj = pylzma.decompressobj()
o = open('decompressed.raw', 'wb')
obj = pylzma.decompressobj()
while True:
tmp = infile.read(1)
if not tmp: break
o.write(obj.decompress(tmp))
o.close()
输出:
o.write(obj.decompress(tmp))
ValueError: data error during decompression
3条答案
按热度按时间4ktjp1zp1#
这将允许您迭代这些行。它部分来自我在回答另一个问题时发现的一些代码。
此时此刻(
pylzma-0.5.0
)py7zlib
模块未实现允许将存档成员作为字节或字符流读取的api—它的ArchiveFile
类只提供一个read()
函数,该函数一次解压缩并返回成员中未压缩的数据。有鉴于此,可以做的最好的事情就是通过python生成器以迭代方式返回字节或行,并将其用作缓冲区。下面是后者,但如果问题是归档成员文件本身太大,则可能没有帮助。
下面的代码应该可以在Python3.x和2.7中使用。
c7rzv4ha2#
如果您使用的是Python3.3+,则可以使用
lzma
在该版本中添加到标准库的模块。见:
lzma
例子ppcbkaq53#
如果您可以使用python 3,那么有一个有用的库py7zr,它支持部分7zip解压缩,如下所示: