如何使用仅包含数据但没有文件名的python解压缩xz文件?

Posted

技术标签:

【中文标题】如何使用仅包含数据但没有文件名的python解压缩xz文件?【英文标题】:How to unpack xz file with python which contains only data but no filename? 【发布时间】:2017-02-07 00:30:01 【问题描述】:

我有一个文件,可以在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 文件中不存在的文件或目录信息。

那么如何解压没有头信息的文件呢?

【问题讨论】:

【参考方案1】:

tarfile 模块仅适用于... err... tar 文件。你在这里拥有的不是一个。


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

try:
    import lzma
except ImportError:
    from backports import lzma

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

【讨论】:

这给了我二进制格式的数据。有没有快速解压整个文件的方法?例如,我有一个文件“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, lzma.open('test.txt.xz').read().decode('utf-8') 太多了?也就是说,您可以通过 lzma.open('test.txt.xz', mode='rt', encoding='utf-8') 获得开箱即用的多字节字符解码。

以上是关于如何使用仅包含数据但没有文件名的python解压缩xz文件?的主要内容,如果未能解决你的问题,请参考以下文章

ZipInputStream - 解压缩文件的功能方法

在python中按块解压缩文件夹

如何使用 GZipStream 解压缩内存中的 gz 文件?

使用 Python 解压缩文件并返回它创建的所有目录

使用 pathlib 模块从 rglob() 方法的输出中解压缩所有项目 [关闭]

如何在 Python3 中解压缩使用 PKZIP 以外的算法加密的文件?