2016-09-28 50 views
0

我有一个输入数据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文件output_veloc_max.dat写入与linenum值相同顺序的行。

结果应该是这样的:

-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 

我究竟做错了什么?

+0

除了存储每一行当你遇到它并在最后打印? –

+0

我希望第7排先打印然后第2排到第6排! –

+0

...然后呢? –

回答

1

将您遇到的值存储在字典d中,其中键表示行号和包含行内容的值。根据linenum的顺序将它们写入文件writelines。使用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]) 

当然,你还可以借助字典理解修剪下来:

linenum = [7, 2, 6] 
with open('inputv.dat', 'r') as f5, open('output_veloc_max.dat', 'w') as out: 
    d = {k: v for k, v in enumerate(f5, 1) if k in linenum} 
    out.writelines([d[i] for i in linenum])