2012-03-26 39 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)