csv文件内含英文逗号怎么办?记一个读取csv文件时遇到的坑

csv文件内含英文逗号怎么办?记一个读取csv文件时遇到的坑

遇到问题

笔者在今天在处理一个csv文件时遇到了这样的内容:

'head0' , 'head1' , 'head2'
'aaa' , 'bbb' , 'ccc'
'aaa' , 'aaa,bbb', 'ccc'

结果用pandas模块的read_csv函数读取csv文件时发现出错,出错信息是: ParserError: Error tokenizing data. C error: Expected 3 fields in line 3, saw 4

这个出错信息的意思是在第三行出现了4列而不是之前的3列,所以为什么第三行会有4列呢?
可以观察到第三行里的 ‘aaa,bbb’ 是带有一个,的,而在csv文件中,是作为分隔符存在的,所以程序将'aaa视为一列,将bbb'视为另外一列,所以就多出来一列了。

解决方法

解决办法是将所有的单引号'替换成双引号",这样的话在读取csv文件时会将双引号"content,content"中的内容视为整体。

csv文件做一次整体替换,变成:

"head0" , "head1" , "head2"
"aaa" , "bbb" , "ccc"
"aaa" , "aaa,bbb", "ccc"

这样的就可以了吗?再试试读取一次还是会出现原来的问题,为什么呢?是因为在上面的csv文件中分隔符左右出现了空格。做一个实验

csv1:

"head0","head2", "head3"

用pandas读取csv1会得到怎样的结果?结果是

Columns: [head0, head2,  "head3"]

为什么结果中head3中带了双引号而前面没带呢?这就是原因。

我们需要在调用read_csv函数时加上参数skipinitialspace=True,这样就能完美解决这个问题啦。