首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python如何有效地组合术语

python如何有效地组合术语
EN

Stack Overflow用户
提问于 2013-10-10 23:06:30
回答 3查看 113关注 0票数 1

我有以下格式的数据:

代码语言:javascript
运行
复制
<abc>  <anything2> <anything3>.
<_901>  <first> <something1>.
<_905>  <second> <something2>.
<_910>  <anything> <something3>.
<_901>  <second> <something4>.
<_905>  <first> <something6>.
<_901>  <third> <something5>.
<_905>  <third> <something7>.

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

代码语言:javascript
运行
复制
   <abc>  <anything2> <anything3>.
   <_901> <something1> <something4> <something5>.
   <_905> <something6> <something2> <something7>.
   <_910>  <anything> <something3>.

我试图使用python字典来实现这一点。但是因为我有一个2 Tera字节的文件。我的程序内存不足,效率很低。在python中是否有更快的方法来实现这一点。如果是,请有人举例说明好吗?

EN

Stack Overflow用户

发布于 2013-10-11 05:30:51

对于这么大的文件,可以多次读取。

首先,读取这些行,并将键字段与数据所在的行号(或者更好的:文件位置)一起存储:

代码语言:javascript
运行
复制
pos = {}
filepos = file.tell()
for line in file:
    sline = line.split()
    pos.setdefault(sline[0], []).append(filepos)
    filepos.file.tell() # for the next read

现在你有了一个像{'':,<_901>:25,87,.}

现在,您可以在dict上迭代并执行以下操作

代码语言:javascript
运行
复制
for key, fileposes in pos.iteritems():
    if len(fileposes) == 1:
        file.seek(fileposes[0])
        print file.readline()
    else:
        outlinedata = []
        for filepos in fileposes:
            file.seek(fileposes[0])
            line = file.readline()
            sline = line.split()
            outlinedata.append(sline[2])
        print key, " ".join(outlinedata)

(但我不确定tell/seek和文件的行文读取和缓冲是否会互相干扰……)

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19307691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档