解析CSV时因双引号引发的问题。
我有一个csv文件,格式如下:
"1";"A";"A:"61 B & BA";"C"
以下是我用来读取csv文件的代码:
with open(path, 'rb') as f:
reader = csv.reader(f, delimiter = ';', quotechar = '"')
for row in reader:
print row
问题是,它把一行分成了5个字段,
['1', 'A', 'A:61 B &', ' BA', 'C']
而我原本期待的输出是:
['1', 'A', 'A:61 B & BA', 'C']
当我把csv文件中61 B前面的双引号去掉时,得到的输出是:
['1', 'A', 'A:61 B & BA', 'C']
这完全没问题,但为什么字段中间的双引号会导致问题呢?明明我已经定义了分隔符和引号字符?
3 个回答
1
你在文本中定义了一个分隔符,但是这个分隔符在你的文本里也出现了,比如说“&”后面有个分号。我建议你把分隔符换成一些在文本中不会出现的字符,比如说“|”这样的符号。
3
我觉得双引号应该换成 "。
8
你的csv文件有问题。如果在一个(被引号包围的)字符串里面出现了引号,那么这个引号必须通过重复来处理,也就是说要写成两个引号。
"1";"A";"A:""61 B & BA";"C"
这样会导致
['1', 'A', 'A:"61 B & BA', 'C']
那么CSV模块应该怎么判断哪些引号是用来分隔项目的,哪些引号是在项目内部的呢?