Python parse CSV忽略带双引号的逗号

2024-06-10 22:00:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件,行如下:

"AAA", "BBB", "Test, Test", "CCC"
"111", "222, 333", "XXX", "YYY, ZZZ" 

等等。。。

我不想在双引号下解析逗号。我的预期结果应该是

AAA
BBB
Test, Test
CCC

我的代码:

import csv
with open('values.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

我尝试在python下使用csv包,但没有成功。解析会分解所有逗号

如果我遗漏了什么,请告诉我


Tags: 文件csv代码testreaderxxxrow逗号
2条回答

这应该可以做到:

lines = '''"AAA", "BBB", "Test, Test", "CCC"
           "111", "222, 333", "XXX", "YYY, ZZZ"'''.splitlines()
for l in  csv.reader(lines, quotechar='"', delimiter=',',
                     quoting=csv.QUOTE_ALL, skipinitialspace=True):
    print l
>>> ['AAA', 'BBB', 'Test, Test', 'CCC']
>>> ['111', '222, 333', 'XXX', 'YYY, ZZZ']

输入中的引号字符前有空格。将^{} to ^{}设置为跳过分隔符后的任何空白:

When True, whitespace immediately following the delimiter is ignored. The default is False.

>>> import csv
>>> lines = '''\
... "AAA", "BBB", "Test, Test", "CCC"
... "111", "222, 333", "XXX", "YYY, ZZZ" 
... '''
>>> reader = csv.reader(lines.splitlines())
>>> next(reader)
['AAA', ' "BBB"', ' "Test', ' Test"', ' "CCC"']
>>> reader = csv.reader(lines.splitlines(), skipinitialspace=True)
>>> next(reader)
['AAA', 'BBB', 'Test, Test', 'CCC']

相关问题 更多 >