我有以下单列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?使用正则表达式分隔符,例如由于causing pandas to ignore quotations.
,因此无法接受sep=';|,'
答案 0 :(得分:0)
这是我们最终可以找到的最佳解决方案:
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并将分隔符设置为,
以允许其被读取。