我有很多包含数据记录的文件,以空格分隔的 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