我尝试按照许多StackOverflow答案中的建议使用python's CSV sniffer tool来猜测给定的CSV文件是否由;
或,
分隔。
它可以正常使用基本文件,但是当一个值包含一个分隔符时,它会被双引号括起来(正如标准所示),而嗅探器会抛出_csv.Error: Could not determine delimiter
。
以前有没有人经历过这个?
以下是最小的失败CSV文件:
column1,column2
0,"a, b"
概念证明:
Python 3.5.1 (default, Dec 7 2015, 12:58:09)
[GCC 5.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> f = open("example.csv", "r")
>>> f.seek(0);
0
>>> csv.Sniffer().sniff(f.read(), delimiters=';,')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/csv.py", line 186, in sniff
raise Error("Could not determine delimiter")
_csv.Error: Could not determine delimiter
我可以完全控制输入CSV文件的生成;但有时它会被使用MS Office的第三方修改,并且分隔符被半毫米替换,所以我必须使用这种猜测方法。 我知道我可以在输入文件中停止使用逗号,但我想知道我是否先做错了。
答案 0 :(得分:18)
你给嗅探器太多输入了。如果您运行:
,您的示例文件将起作用csv.Sniffer().sniff(f.readline())
仅使用标题行来确定分隔符。如果您想了解为什么Sniffer启发式失败以获取更多数据,那么reading the csv.py library source code就无法替代。