gpt4 book ai didi

python 如何有效地将术语组合在一起

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:58 25 4
gpt4 key购买 nike

我有以下格式的数据:

<abc>  <anything2> <anything3>.
<_901> <first> <something1>.
<_905> <second> <something2>.
<_910> <anything> <something3>.
<_901> <second> <something4>.
<_905> <first> <something6>.
<_901> <third> <something5>.
<_905> <third> <something7>.

现在我想将与第一列和第二列的(第一、第二、第三)值相对应的所有信息分组在一起,以便获得以下形式的聚合信息:

   <abc>  <anything2> <anything3>.
<_901> <something1> <something4> <something5>.
<_905> <something6> <something2> <something7>.
<_910> <anything> <something3>.

我尝试使用 python 字典来实现这一点。但因为我有一个 2 Tera 字节的文件。我的程序内存不足并且效率非常低。 python 有没有更快的方法来实现这一点。如果是的话,有人可以举例说明吗?

最佳答案

首先,您可以尝试使用unix工具sort对数据进行排序(它可以很好地处理非常大的文件)。然后,具有相同第一个和第二个字段的行将位于连续 block 中,以便您可以使用 python 脚本迭代它们并以您喜欢的格式输出。下面给出了一个示例,说明您不希望任何第二列中没有第一、第二或第三的数据。

# merger.py
# this python script takes in a file with sorted lines and gives your output
import sys

prevtag = None
data = ['', '', '']
printed = True
for line in sys.stdin:
fields = line.strip().split()
if fields[0] != prevtag:
if not printed:
print prevtag, ' '.join(data)
printed = True
prevtag = fields[0]
data = ['', '', '']
if fields[1] == '<first>':
data[0] = fields[2]
printed = False
if fields[1] == '<second>':
data[1] = fields[2]
printed = False
if fields[1] == '<third>':
data[2] = fields[2]
printed = False
if not printed:
print prevtag, ' '.join(data)

现在您可以将 sort 的输出通过管道传输到此脚本中以实现您想要的效果。

sort <inputfile> | python merger.py

输入:

<abc>  <anything2> <anything3>
<_901> <first> <something1>
<_905> <second> <something2>
<_910> <anything> <something3>
<_901> <second> <something4>
<_905> <first> <something6>
<_901> <third> <something5>
<_905> <third> <something7>

输出:

<_901> <something1> <something4> <something5>
<_905> <something6> <something2> <something7>

关于python 如何有效地将术语组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19307691/

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