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

标签 python python-2.7

我有以下格式的数据:

<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/

相关文章:

python - 使用 python 中的线程从无限循环中读取结果

python - python中使用key对数据进行排序

javascript - 如何使用 selenium 在 Python 中刷新已有的网页?

python - 在 Python 中通过重定向获取 session ID

python - 从 tastypie 上的资源中删除列表端点

python - Matplotlib 3D plot - 从某些角度看参数曲线 "wraparound"

python - pip 失败,出现 AttributeError : 'module' object has no attribute 'wraps'

Python 2.7 回车倒计时

python - 如何从另一个模块获取函数中的模块变量?

python - 如何使用 Mechanize cookie 获取 http 页面?