【问题标题】:Parse CSV and seperate fields with multiple values解析 CSV 并使用多个值分隔字段
【发布时间】:2012-03-26 13:01:44
【问题描述】:

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

【问题讨论】:

  • 您可能必须更清楚自己要完成的工作。也许您正在收益声明周围寻找for elt in line[19].split(','):
  • 试图扩展字段中以逗号分隔的值。尝试了您的回复,但得到了相同的结果,请参阅更新后的问题。
  • 您能否发布一个简短但实际的输入和(所需)输出示例? abc sn-p 一点用都没有。
  • 要考虑的事情:如果您从不使用 eltfor elt in line[19].split(','): 是多余的。

标签: python csv


【解决方案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)

【讨论】:

  • 我不清楚c.split 在我的示例代码中的位置。
  • 修改答案后不会。我将进行编辑以包含完整的解决方案。唯一的区别是以前的 sn-p 无需修改即可适用,而这会修改您的代码以使其正常工作。
  • 虽然在被分割的行前面有一个空格,但它仍然有效。您将如何防止打印空间?
  • 使用python字符串strip()方法。修改答案以反映。
【解决方案2】:
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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2011-06-27
    • 2019-02-03
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多