【问题标题】:parsing csv string in python在python中解析csv字符串
【发布时间】:2021-01-08 18:05:37
【问题描述】:

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

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

还有这个

a,b,c
d,e,f

我想用 python csv 模块解析它们。我该怎么做?假设第二个是两行,但第一个不是。

我认为它们需要被加载到csv.reader() 所以首先我需要用逗号将它们分开所以使用.split(',') 但它会在第二个字符串上出现问题,因为它会忽略换行符,我也想到了.splitline(),但在这种情况下,它会弄乱第一个字符串..

一整天都在尝试解决这个问题,但我没有想法......有什么帮助吗?

【问题讨论】:

    标签: python string csv parsing


    【解决方案1】:

    您遇到的问题是, 后面有一个空格,因此在第一个示例中,您的实际分隔符是', '

    幸运的是,您不是第一个遇到此问题的人。使用csv.skipinitialspace设置为True求解。

    给定:

    $ 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 文件本身怎么办?
    • 您可以使用ioStringIO(取决于您的Python 版本)允许csv 库将字符串视为文件。
    • Here 是 Tim Pietzcker 将这些库与 csv 模块一起使用的绝佳示例。
    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多