pandas read_csv 使用 sep=None 错误地读取列数

pandas read_csv incorrectly reading number of columns with sep=None

我有以下单列 CSV 文件:

id
1
2
3

当我用 pandas.read_csv('path/to/csv') 读取 csv 时,它可以正确读取它。

但是,要求规定我必须接受多个分隔符,因此我现有的代码使用 sep=None.

读取上述 CSV 时,pandas.read_csv('path/to/csv', sep=None) 生成 ValueError: Expected 2 fields in line 2, saw 1。显然它错误地识别了一个分隔符并期望两列。

任何人都可以提出解决此问题的方法,使我能够继续接受多个定界符,同时还能正确处理上面的 CSV 文件吗?使用正则表达式定界符,例如sep=';|,' 不可接受,因为 causing pandas to ignore quotations.

这是我们最终找到的最佳解决方案:

data = csv_file.decode(chardet.detect(csv_file)['encoding'])
dialect = csv.Sniffer().sniff(StringIO(data).readline())
if dialect.delimiter.isalnum():
    dialect.delimiter = ','  
pd.read_csv(StringIO(data), dialect=dialect)

推理如果 Sniffer 无法检测到分隔符,它是单行 CSV 并且将分隔符设置为 , 允许读取它。