2012-11-12 77 views
0

我有這樣一個CSV:如何獲得非CSV行csv文件

"Equipment","LNKEQP","METAST","METSER","MODSTA","METEOD" 
"HLL_POS_00098",1,1,0,0,0 
"TOY_GAT_00003",0,0,0,3,0 
"NAT_POS_00010",0,3,0,3,0 
"NAT_GAT_00002",0,0,0,0,0 
"NAT_GAT_00001",0,0,0,4,0 
A machine A is unavailable 

我用的是代碼來讀取CSV文件:

reader = csv.DictReader(f) 
s=[] 
for row in reader: 

但該行不包含「A機器A不可用」,如何獲取此行並輸出爲此示例:

'METEOD': '0', 'MODSTA': '0', 'METSER': '0', 'LNKEQP': '0', 'METAST': '0', 'Equipmnt': 'NAT_VCF_00001' 
'METEOD': '0', 'MODSTA': '0', 'METSER': '0', 'LNKEQP': '1', 'METAST': '1', 'Equipment': 'NAT_TVM_00002' 
A machine A is unavailable 

感謝您的幫助

+2

與非CSV行的文件是不是一個CSV文件。 – 2012-11-12 10:46:18

+0

我知道,但該文件中有一些行,我必須處理它們並輸出,如上面的輸出。任何幫助這樣的文件? – SieuTruc

回答

4

解析它們之前刪除有問題的線路:

import csv 
from StringIO import StringIO 

i = """"Equipment","LNKEQP","METAST","METSER","MODSTA","METEOD" 
"HLL_POS_00098",1,1,0,0,0 
"TOY_GAT_00003",0,0,0,3,0 
"NAT_POS_00010",0,3,0,3,0 
"NAT_GAT_00002",0,0,0,0,0 
"NAT_GAT_00001",0,0,0,4,0 
A machine A is unavailable 
""" 

# Take only those lines that contain a comma. 
j = "".join([line for line in StringIO(i).readlines() if ',' in line]) 

# Parse the taken lines as CSV. 
reader = csv.reader(StringIO(j)) 
for line in reader: 
    print line 

輸出:

['Equipment', 'LNKEQP', 'METAST', 'METSER', 'MODSTA', 'METEOD'] 
['HLL_POS_00098', '1', '1', '0', '0', '0'] 
['TOY_GAT_00003', '0', '0', '0', '3', '0'] 
['NAT_POS_00010', '0', '3', '0', '3', '0'] 
['NAT_GAT_00002', '0', '0', '0', '0', '0'] 
['NAT_GAT_00001', '0', '0', '0', '4', '0'] 
+0

你的意思是我必須手動執行它? – SieuTruc

+0

我改變了我的帖子。 – 2012-11-12 11:08:16

+0

感謝您的解決方案,現在我知道最好將它們分成兩組:csv和non-csv。 – SieuTruc