使用Python解析CSV字符串

3

假设我有一个这样的字符串

ab, "cd
ef", gh, "ijk, lm" 

并且这个

a,b,c
d,e,f

我想用Python的csv模块解析它们,该怎么做?第二个字符串被认为是两行,但第一个不是。
我以为它们需要被加载到csv.reader()中,所以首先想到需要用逗号将它们分割开,因此使用了.split(',')。但这会导致第二个字符串出现问题,因为它会忽略换行符。我也想过使用.splitline(),但在这种情况下会混淆第一个字符串。
我已经尝试了一整天来解决这个问题,现在已经没有任何想法......请问有人能帮帮我吗?
1个回答

3
你遇到的问题是在 , 后面有一个空格,所以在第一个示例中你实际使用的分隔符是 ', '
幸运的是,你不是第一个遇到这个问题的人。可以使用设置为 Truecsv.skipinitialspace 来解决问题。
假设有以下代码:
$ cat file1.csv
ab, "cd
ef", gh, "ijk, lm"

并且:

$ cat file2.csv
a,b,c
d,e,f

您可以做以下事情:
with open('file1.csv', 'r') as f:
    for row in csv.reader(f, quotechar='"',skipinitialspace=True):
        print(f"len: {len(row)}, row: {row}")

输出:

len: 4, row: ['ab', 'cd\nef', 'gh', 'ijk, lm']

同样的方言适用于第二个示例,在该示例中,有一个真正的,分隔符而没有尾随空格:

with open('file2.csv', 'r') as f:
    for row in csv.reader(f, quotechar='"',skipinitialspace=True):
        print(f"len: {len(row)}, row: {row}")

输出:

len: 3, row: ['a', 'b', 'c']
len: 3, row: ['d', 'e', 'f']

谢谢,这很有帮助。不过,如果输入是原始字符串而不是 CSV 文件本身呢? - MrSolid51
你可以使用 io 或者 StringIO(取决于你的 Python 版本)来让 csv 库将一个字符串作为文件处理。 - dawg
这里是Tim Pietzcker使用csv模块和这些库的绝佳示例。 - dawg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接