快速重新排列文本

2024-09-26 22:42:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了下面的代码来按照给定的顺序重写一个文本文件。这个顺序在gA中指定。gA是一个列表:[[fN0,value0],[fN1,value1] ...]。我按值对这个列表排序,并想按照这个顺序写出。你知道吗

我的代码运行得很好,但输入速度非常慢(我有一个有50万行的输入,需要2个月的时间来处理)。因此,我正在寻找方法来紧固这个代码。任何想法都欢迎。你知道吗

for k in gA:
    fN = k[0]
    for lineNum, line in enumerate(slicedFile,start=0):
        num, restOfLine = line.split('\t',1)
        if num == fN:
            out.write(line)
    inp.seek(0)

Tags: 代码in列表for排序顺序linenum
1条回答
网友
1楼 · 发布于 2024-09-26 22:42:07

您应该将整个文件读入内存,并将所有行放在一个dictnum中,指向一个listlinenum开头。然后可以遍历gA并打印该dict中的所有行:

from collections import defaultdict

lines = defaultdict(list)
for line in slicedFile:
  num, restOfLine = line.split('\t', 1)
  lines[num].append(line)

for fN, dummy in gA:
  for line in lines[fN]:
    out.write(line)

注意:我使用defaultdict只是为了缩短代码。如果在这样的defaultdict中使用了一个不存在的元素,那么它会自动创建(在本例中是list),因此我可以调用该元素的.append()。你知道吗

相关问题 更多 >

    热门问题