2014-03-18 92 views
1

我有一個約80000行的文本文件。我試圖執行以下步驟: -只寫一個字符串的所有分割線到一個文件

  1. 我想根據其第一個字符找到行。我能夠做到這一點。
  2. 現在我剩下7500行。
  3. 我正在分割線並顯示其line.split()[-2]字符串。
  4. 我想寫這些字符串到一個文本文件,我有困難。

下面是我的代碼,有人可以弄清楚我做錯了什麼。

f4 = open("lines.txt") #subroutine to find out number of intervals 
for i in range(header_lines): 
    for line in f4: 
    with open("satsid.txt","w") as f5: 
     if line.startswith(" 12"): 
      print line.split()[-2] 
      f5.write('line.split()[-2]') 
      numints = numints+1; 
     if not line: 
      break  
+0

什麼是循環'爲我在範圍(header_lines):'應該達到?如果不重新打開或倒帶到頭,就無法反覆讀取'f4',但我從不在循環中使用'i',所以我懷疑它在這裏完全是多餘的。 –

+0

1)我打開文件完全,閱讀header_line後(說15,我從第16行讀取文件) – user252614

回答

0

忽略了header_lines下面的循環會複製你的代碼,而無需重新打開f5文件中的每個時間(每次重新打開時將其清除):

with open("lines.txt") as f4, open("satsid.txt","w") as f5: 
    for line in f4: 
     if line.startswith(" 12"): 
      f5.write(line.split()[-2] + '\n') 

此寫入1,但如果行以' 12'(空格,然後是1,然後是2)開始,則從行到f5的最後一個元素。我在輸出文件中的這些值之間添加一個換行符。

如果您需要在f4跳過的行數(比如存儲在header_lines數字),使用itertools.islice()限制循環:

from itertools import islice 

with open("lines.txt") as f4, open("satsid.txt","w") as f5: 
    for line in islice(f4, header_lines, None): 
     if line.startswith(" 12"): 
      f5.write(line.split()[-2] + '\n') 

islice()將跳過header_lines線,然後經過休息的文件直到結束。

+0

非常感謝。我很感謝你的回答。 – user252614