根据列表中的顺序将输入文件中的行写入输出文件

时间:2016-09-28 09:30:02

标签: python python-3.x for-loop

我的输入数据input.dat如下所示:

0.00    0.00
0.00    0.00
0.00    0.00
-0.28   1.39
-0.49   1.24
-0.57   1.65
-0.61   2.11
-0.90   1.73
-0.87   2.29

我有一个表示行号的列表如下:

linenum = [7, 2, 6]

我需要将文件output_veloc_max.dat写入input.dat中与linenum值相对应的行。{/ p>

结果应如下所示:

-0.61 2.11
0.00 0.00 
-0.57 1.65

我写了以下代码:

linenum=[7,2,6]
i=1

with open('inputv.dat', 'r') as f5, open('output_veloc_max.dat', 'w') as out:
    for line1 in f5:
        if i in linenum:
            print(line1,  end=' ', file=out)
            print(i,line1)
        i+=1

但是,它给我的输出看起来像这样:

2 0.00  0.00
6 -0.57 1.65
7 -0.61 2.11

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在字典d中存储您遇到的值,其中的键表示行号和包含行内容的值。根据{{​​1}}的顺序,使用writelines将其写入文件。使用linenum获取每行的行号,而不是像enumerate(fileobj, 1)这样的显式计数器:

i

当然,您可以通过字典理解进一步减少这一点:

linenum=[7,2,6]
d = {}

with open('inputv.dat', 'r') as f5, open('output_veloc_max.dat', 'w') as out:
    for num, line1 in enumerate(f5, 1):
        if num in linenum:
            d[num] = line1
    out.writelines([d[i] for i in linenum])