2013-12-23 39 views
1

我試圖遍歷一個未被破壞的csv文件(它沒有特定的標題)。該文件由儀器生成。我需要選擇具有特定列值的特定行並創建另一個文件。下面是文件格式的示例從非結構化csv文件中選擇特定行並使用python寫入到另一個文件

,success, (row1) 

1,2,protocol (row2) 

78,f14,34(row3) 

,67,34(row4) 

,f14,34(row5) 

3,f14,56,56(row6) 

我需要選擇'fi4'值的所有行。以下是密碼

import csv 
import sys 
reader = csv.reader(open('c:/test_file.csv', newline=''), delimiter=',', quotechar='|') 
for row in reader: 
     print(','.join(row)) 

我無法超越這一點。

回答

1

就快:

for row in reader: 
    if row[1] == 'f14': 
     print(','.join(row)) 
+0

非常感謝您! – user3130236

0

你只需要檢查,看看該行是否是一個你通過檢查列的值感興趣或沒有,看看它是否就是你」重新尋找。這可以通過簡單的if row[1] == 'f14'條件語句來完成。然而,在任何空白行上 - 它看起來像你的輸入文件可能會失敗 - 所以你需要在前面檢查另一行,以確保行中至少有很多列。

要創建另一個只包含這些行的csv文件,您只需編寫將所有檢查傳遞到打開的其他文件以進行輸出的所有行,而不是或者除了將行打印出來外。下面是將行寫入另一個文件的非常簡潔的方法。 (注意:我不確定爲什麼你在csv.reader()調用中的代碼中有quotechar='|',因爲在顯示的輸入文件中沒有任何引號字符,所以我把它留在下面的代碼中 - 你可能需要重新添加如果這確實是它會是什麼,如果有任何)

import csv 

with open('test_file.csv', newline='') as infile, \ 
    open('test_file_out.csv', 'w', newline='') as outfile: 

    csv.writer(outfile).writerows(row for row in csv.reader(infile) 
            if len(row) >= 2 and row[1] == 'f14') 

'test_file_out.csv'文件的內容之後:

78,f14,34(row3) 
,f14,34(row5) 
3,f14,56,56(row6) 
+0

非常感謝,Martineau ......這很有幫助 – user3130236

相關問題