在python中逐行迭代一个大的.xz文件

Posted

技术标签:

【中文标题】在python中逐行迭代一个大的.xz文件【英文标题】:Iterate a large .xz file line by line in python 【发布时间】:2018-03-18 12:52:48 【问题描述】:

我有一个大的 .xz 文件(几 GB)。它充满了纯文本。我想处理文本以创建自定义数据集。我想逐行阅读它,因为它太大了。有人知道怎么做吗?

我已经试过了 How to open and read LZMA file in-memory 但它不起作用。

编辑: 我收到此错误“ascii”编解码器无法解码位置 0 的字节 0xfd:序数不在范围内(128)

从链接for line in uncompressed:上线

EDIT2:我的代码(使用 python 3.5)

with open(filename) as compressed:
    with lzma.LZMAFile(compressed) as uncompressed:
        for line in uncompressed:
            print(line)

【问题讨论】:

怎么不工作了? 寻求帮助调试的问题应包括minimal reproducible example 我会编辑问题 我们可以看到您正在使用的代码,而不仅仅是错误消息吗?你使用的是什么版本的 Python? 我已经编辑了问题 【参考方案1】:

几周前我也遇到过同样的问题。这个 sn-p 对我有用:

import lzma
with lzma.open('filename.xz', mode='rt') as file:
    for line in file:
       print(line)

这假设压缩文件中的文本数据是用 utf-8 编码的(我的数据就是这种情况)。函数lzma.open() 中有一个encoding 参数,允许您在需要时设置另一个编码

编辑(在您自己编辑之后):尝试在lmza.open() 中强制encoding='utf-8'

【讨论】:

谢谢伙计!我将您的代码与编码参数一起使用,并且有效。 :)

以上是关于在python中逐行迭代一个大的.xz文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在目标c中逐行解析JSON文件

在python中逐行读取大文件

在一个非常大的文件中逐行读取特定的行

如何在 ASP.NET Core 3.1 中逐行迭代列表

从文本文件中逐行提取数据并将其存储在python的列表中[重复]

C ++在循环中逐行写入文件或添加到数组并在循环后写入文件?