如何使用Python解压只包含数据而没有文件名的xz文件?

16

我有一个文件,在Linux下可以使用以下命令进行解压缩:

unxz < file.xz > file.txt

我可以帮助您翻译以下内容:

我如何使用Python实现相同的功能? 如果我使用Python3和tarfile模块,并执行以下操作:

import sys
import tarfile
try:
    with tarfile.open('temp.xz', 'r:xz') as t:
        t.extract()
except Exception as e:
    print("Error:", e.strerror)

我遇到了异常:ReadError('invalid header',)。显然,它预期一些文件或目录信息,但在xz文件中并不存在。

那么,我该如何解压无头信息的文件呢?

2个回答

29

tarfile 模块只用于... 嗯... tar 文件。而你手头的不是 tar 文件。


Python 3.3 的 LZMA 模块支持 XZ。在 Python 2.x 中,你需要使用 backports.lzma

try:
    import lzma
except ImportError:
    from backports import lzma

print lzma.open('file.xz').read()

1
这个命令会以二进制格式给我数据。有没有一种快速的方法来解压整个文件?例如,我有一个名为“test.txt.xz”的文件,需要一个命令来获取“test.txt”。 一种方法是使用以下方式将二进制格式的数据转换为UTF-8:binary_data_buffer = lzma.open('test.txt.xz').read(),然后string_buffer = binary_data_buffer.decode('utf-8'),最后将其写入文件。但我相信有更优雅的方法来做到这一点。 - Pete
6
@Pete,lzma.open('test.txt.xz').read().decode('utf-8') 这句话有点冗长?但是你可以使用 lzma.open('test.txt.xz', mode='rt', encoding='utf-8'),它可以直接解码多字节字符。 - Charles Duffy

2

正如Charles在早期评论中所指出的那样,

使用以下方法可以在Python中读取XZ压缩的文本文件(https://docs.python.org/3/library/lzma.html#lzma.open

with lzma.open('test.txt.xz', mode='rt', encoding='utf-8') as fid:
    for line in fid:
        print(line)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接