2016-09-28 46 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])