gpt4 book ai didi

python - 如何根据前两个匹配列从多个大型文本文件的第三列中提取数据?

转载 作者:行者123 更新时间:2023-12-01 07:47:27 25 4
gpt4 key购买 nike

我有 3 个大型文本文件(每个 >16 M 行),格式如下。

文件1的内容:

22_0F3, 33_0F4, 0.87
28_0F3, 37_0F4, 0.79
21_0F5, 39_2F1, 0.86

文件2的内容:

22_0F3, 33_0F4, 1000
28_0F3, 37_0F4, 1500
21_0F2, 52_2F8, 3600

文件3的内容:

22_0F3, 33_0F4, 0.75
28_0F3, 37_0F4, 0.91
81_0F2, 32_2F1, 0.84

我正在尝试根据这 3 个文件中的前两个字段提取公共(public)行。

然后我必须找到每行第三列中每个对应值的平方的平方根(如下所述)。

困难在于,由于这些文本文件非常庞大,超过 1600 万行,因此加载和提取公共(public)行需要更多时间。

根据我掌握的数据,公共(public)线路约为15M。

中间输出是这样的:

22_0F3, 33_0F4, 0.87, 1000, 0.75
28_0F3, 37_0F4, 0.79, 1500, 0.91

所需的输出是:

22_0F3, 33_0F4, 1000.7575
28_0F3, 37_0F4, 1500.6245

其中 1000.75750.8710000.75 平方和的平方根。

如何在没有太多延迟的情况下从这些大文件中获得所需的输出?

最佳答案

您可以扫描这 3 个文件,并在内存中构建一个字典,以代码对为键,以数字列表为值。对于大多数现代 PC 来说,包含 1600 万个小项目的字典应该不成问题。然后遍历字典,对列表中具有 3 个值的项目进行计算,并将它们写入输出文件。

# Aggregation (build dictionary of lists) ...

from collections import defaultdict
data = defaultdict(list)
for fileName in ["file1.txt","file2.txt","file3.txt"]:
with open(fileName,'r') as lines:
for line in lines:
col1,col2,value = line.split(",")
if col1>col2 : col1,col2 = col2,col1 # match codes in any order
data[(col1,col2)].append(float(value))

# Calculation and output...

from math import sqrt
with open("output.txt","w") as output:
for (col1,col2),values in data.items():
if len(values) < 3: continue # must have the 3 matches
result = sqrt(sum( x*x for x in values)) # use your formula here
output.write(f"{col1},{col2}, {result}\n")

在我的笔记本电脑上,15,000,000 条匹配行需要 68 秒。 (但我有SSD,硬盘驱动器可能需要更长的时间)

请注意,我在计算中使用了平方和的平方根。根据你的例子,这显然不是正确的公式,因为√(0.87^2 + 1000^2 + 0.75^2) 是 1000.0006597 而不是 1000.7575。我假设您将用您自己的计算结果替换我的 √Σn^2 公式。

关于python - 如何根据前两个匹配列从多个大型文本文件的第三列中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com