2012-03-26 37 views
1

CSV字段正在被解析,其中可能包含或不包含字段中具有用逗號分隔的值的條目。解析CSV並使用多個值分隔字段

import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, 
          skipinitialspace=True): 
     if line[19]: 
      for elt in line[19].split(','): 
       yield elt 


for data in import_text('filename.csv', ','): 
    print (data) 

在CSV使用上述的腳本,柱20將打印以下:

a 
b, c, d 
e, f 

我反而等B,C,d; E,F打印在它們各自的線路,像這樣:

a 
b 
c 
d 
e 
f 
+1

你可能必須對你想要什麼更清晰去完成。也許你正在尋找'for elt in line [19] .split(','):'圍繞你的產量聲明 – ajwood 2012-03-26 13:11:15

+0

嘗試擴展在字段中逗號分隔的值。試過你的迴應,但得到相同的結果,看到更新的問題。 – Astron 2012-03-26 14:03:16

+1

您可以發佈一個簡短但實際的輸入和(期望)輸出示例嗎? abc片段根本沒有幫助。 – georg 2012-03-26 14:10:04

回答

1

拆分列和產量分別領域:

import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, skipinitialspace=True): 
    if line[19]: 
     for elt in line[19].split(separator): 
     yield elt.strip() 

for data in import_text('filename.csv', ','): 
    print (data) 
+0

我不清楚'c.split'可能落在我的示例代碼中。 – Astron 2012-03-26 14:04:23

+0

修改你的答案後不會。我將編輯以包含完整的解決方案。唯一的區別是以前的代碼片段可以不經修改就適合,而這會修改您的代碼的工作。 – brice 2012-03-26 14:10:24

+0

儘管在分割的行的前面有一個空格,但它仍能正常工作。你會如何防止打印空間? – Astron 2012-03-26 14:27:41

1
import csv 

def import_text(filename, separator): 
    for line in csv.reader(open(filename), delimiter=separator, skipinitialspace=True): 
     if len(line) > 19: 
      for elt in line[19].split(separator): 
       yield elt 

for data in import_text('filename.csv', ','): 
    print (data)