如何快速解析大型 ASCII 文件以查找匹配的记录?

如何快速解析大型 ASCII 文件以查找匹配的记录?

我有很多包含数据记录的文件,以空格分隔的 ASCII 文件形式存储。每条记录都是一行,包含数字数据,有些列是整数,有些列是浮点数。例如:

1 1  5711  4 22280.365035   75.917899   55.485326    4.0260    3.9460    1.7921   11.2400    0.0000    2.6735   54.7331   52.7375

我想根据简单标准(第 2 列 == 1、第 6 列 >= 53.275 等)解析这些数据,并将匹配的记录转储到另一个文件。

每个文件大小约为 1GB,对应约 9M 条记录。目前我有一些 MATLAB 代码可以逐行运行,但这需要很长时间(每个文件约 2 小时)。我使用 MATLAB 的唯一原因很简单,因为我稍后会用它来处理数据。

我如何才能更有效地解析/处理它?是否值得为此使用“适当”的语言,或者我不太可能看到速度显着提高?

答案1

一个简单的 Python 脚本可能比你在 bash 中执行的任何操作都快。例如:

#!/usr/bin/python

with open("data") as data:
    with open("filtered", "w") as filtered:
        for row in data:
            values = row.split()
            if (int(values[1]) == 1) and (float(values[5]) >= 53.275):  # [1]
                filtered.write(row)

[1]:在 python 中索引从零开始,因此values[1]values[5]分别是第二列和第六列。

如果不知道你的数据到底是什么样的,以及有多少数据与你的过滤器相匹配,就不可能进行正确的测试,但是对于几个快速拼凑在一起的样本文件,我得到了以下结果:

data_1   1000000 rows       35 matching rows   1.5 seconds
data_2   1000000 rows   565722 matching rows   3.1 seconds

相关内容