解析CSV时因双引号引发的问题。

3 投票
3 回答
4690 浏览
提问于 2025-04-17 01:40

我有一个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 &amp', ' 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模块应该怎么判断哪些引号是用来分隔项目的,哪些引号是在项目内部的呢?

撰写回答