2017-06-12 53 views
0

我有兩個測試文件。文件1 - 多個標題,文件2 - 標題和說明。 我需要從文件1中讀取一行,即標題,並找到文件2中的匹配標題,並打印描述,直到'END' 我嘗試使用islice和f.next()但不起作用讀取行,直到一個特定的行

with open('H:/Python/proj1/p4 faults.swi', 'r') as content_file: 
    content = content_file.readlines() 

    for x in ViolList: 
     for i, line in enumerate(content): 
      line =line.upper() 
      x1 = x1.upper() 

      if x1 in line : 
       count = count + 1 

       outFile.write(line) 
       outFile.write(content_file.next()) 
       if line.strip()== 'End': 
        break 
+1

什麼'ViolList'和'x1'?你有錯誤嗎?你能顯示你的輸入文件的例子部分嗎? – Stuart

+0

ViolList - 文件1項內容和X1 = '說明' + X – GigI

+0

文件1 標題1 標題2 標題3 文件2 標題11 Descrption .. 說明.. END 標題2 Descrption .. 說明.. END – GigI

回答

0

您的代碼有幾個問題,包括引用尚未定義的變量x1,以及定義未使用的變量counti。試圖讓content_file.next()將無法​​正常工作,因爲你已經閱讀所有內容,當你叫content_file.readlines()

而是做這樣的事情:通過內容重複;如果一行包含標題,則設置一個標誌並將行寫入輸出文件;該標誌將爲真,循環將繼續寫入行,直到遇到「結束」。

with open('titles', 'r') as titles_file: 
    titles = [title.strip().upper() for title in titles_file] 

description = False 
with open('H:/Python/proj1/p4 faults.swi', 'r') as content, open('outfile.txt') as output: 
    for line in content: 
     if description: 
      output.write(line) 
      if line.strip().upper() == "END": 
       description = False 
     elif line.strip().upper() in titles: 
      output.write(line) 
      description = True 
+0

感謝您的答覆。但我無法得到我需要的答案。我已經添加了完整的代碼上面 – GigI

+0

@Gigl我看不到在你的代碼 – Stuart

+0

上面我不能代碼上傳由於一些問題的任何變化。但我用你的標誌方法,並得到了我想要的結果。萬分感謝! – GigI