2017-07-31 45 views
0

我有一個包含關鍵字的輸入文件,並且需要對這些關鍵字過濾csv文件。讀取兩個文件並根據第一個文件的列過濾第二個文件

這裏是我嘗試使用python自動化任務。

import csv 
with open('Input.txt', 'rb') as InputFile: 
    with open('28JUL2017.csv', 'rb') as CM_File: 
     read_Input=csv.reader(InputFile) 
     for row1 in csv.reader(InputFile): 
      #print row1 

      read_CM=csv.reader(CM_File) 
      next(read_CM, None) 
      for row2 in csv.reader(CM_File): 
       #print row2 
       if row1[0] == row2[0] : 

        Output= row2[0]+","+row2[1]+","+row2[5]+","+row2[6] 
        print Output 

我剛剛從要過濾的文件的第一行。嘗試了各種各樣的東西,但不明白我出錯的地方。請在這裏指出我的錯誤。

+1

你需要倒帶(或關閉並重新打開)的'CM_File'爲了閱讀'csv.reader'不只一次。一次讀取所有關鍵字並創建它們的集合會更有效,然後讀取一次'CM_File'並檢查每個關鍵字中是否有_any_關鍵字在讀取時位於每行中。 – martineau

+0

如果您多次需要來自文件的數據,請將其全部讀入可以解析多次的字符串或列表。文件對象不像doobies要傳遞。你的邏輯應該是:1)讀取第一個文件2)關閉第一個文件3)讀取第二個文件4)比較來自第一個文件的數據和來自第二個文件的數據5)對第二個文件做些東西6)關閉第二個文件。 –

回答

1

read_Inputread_CM本質上是迭代器。一旦你循環它們 - 你就完成了:你不能迭代兩次。如果您堅持按照自己的方式進行操作,那麼您每次需要開始一個新循環並「重新讀取」​​CSV文件時,都必須倒退到文件的開頭。這裏是一個修復:

import csv 
with open('file1.csv', 'rb') as InputFile: 
    with open('file2.csv', 'rb') as CM_File: 
     read_Input=csv.reader(InputFile) 
     for row1 in csv.reader(InputFile): 
      CM_File.seek(0) # rewind to the beginning of the file 
      read_CM=csv.reader(CM_File) 
      next(read_CM, None) 
      for row2 in csv.reader(CM_File): 
       if row1[0] == row2[0] : 
        Output= row2[0]+","+row2[1]+","+row2[5]+","+row2[6] 
        print Output 

取而代之的是,我會建議你循環已讀線,而不是重新閱讀文件。此外,而不必嵌套循環,打造「關鍵字」的列表,並簡單地檢查row2[0]是在該列表:

import csv 
with open('file1.csv', 'rb') as InputFile: 
    with open('file2.csv', 'rb') as CM_File: 
     read_Input = csv.reader(InputFile) # read file only once 
     keywords = [rec[0] for rec in read_Input] 
     read_CM = csv.reader(CM_File) # read file only once 
     next(read_CM, None) # not sure why you do this? to skip first line? 
     for row2 in read_CM: 
      if row2[0] in keywords: 
       Output = row2[0]+","+row2[1]+","+row2[5]+","+row2[6] 
       print("Output: {}".format(Output)) 
+0

進行您建議的更改,結果爲零。我得到的第一行也消失了。如果我添加一些示例數據會有幫助嗎? – user3017186

+0

當然,一些數據肯定會有幫助。也預期的結果也不會傷害。 –

+0

@ user3017186我已經根據兩個測試文件的測試編輯了我的答案。 –

相關問題