首页 > 解决方案 > CSV Parse 有空单元格

问题描述

我正在使用 Python 3.5 从 CSV 中读取一行,并且缺少一些非常基本的内容:

s = '"Cats wheels.","Womp"\n'
reader = csv.reader(s)
for j in reader: print(j)

我希望这只会打印两个单元格,但它会打印:

['Cats wheels.']
['', '']
['Womp']
[]

有谁知道我怎样才能在这里得到一个两个单元格的解析?

标签: pythonpython-3.xcsv

解决方案


那是因为csv.reader需要一个文件对象并遍历它。从文档中引用:

csvfile可以是任何支持迭代器协议并在每次__next__()调用其方法时返回一个字符串的对象——文件对象和列表对象都适用。

从以下位置读取时观察差异StringIO

import io
s = '"Cats wheels.","Womp"\n'
buff_s = io.StringIO(s)
reader = csv.reader(buff_s)
for j in reader:
    print(j)

# ['Cats wheels.', 'Womp']

要在评论中回答您的问题:csv.reader是否针对Iterators 进行类型检查,例如:

[j for j in csv.reader(123)]   # reader on int type

# ... Traceback ... #
# TypeError: argument 1 must be an iterator

也就是说,支持该str类型因为它迭代,只是它本身无用,因为iter(some_str)它被空字符串分割'',所以每个 char 都被视为换行符。如果你真的想按字符串解析,你可以split像这样指定你的字符串:

for j in csv.reader(s.split('\n')):
    print(j)


# ['Cats wheels.', 'Womp']
# []

推荐阅读