如何对两种不同的CSV类型使用csv.Sniffer?
我想读取两种不同类型的CSV文件:
- 一种是用
','
作为分隔符的 - 另一种是用
';'
作为分隔符的
我尝试通过以下方式检查我使用的是哪种分隔符:
dialect = csv.Sniffer().sniff(csvfile, [',', ';'])
data = csv.reader(csvfile, dialect)
但是我遇到了 TypeError : expected string or buffer
的错误。
如果我这样做,就能正常工作,但我不知道什么时候该用哪种分隔符。
data = csv.reader(csvfile, delimiter = ",")
data = csv.reader(csvfile, delimiter = ";")
有人能帮帮我吗?
1 个回答
32
Sniffer 这个工具需要一个示例字符串,而不是一个文件。你只需要做以下几步:
dialect = csv.Sniffer().sniff(csvfile.readline(), [',',';'])
csvfile.seek(0)
data = csv.reader(csvfile, dialect)
这里的 seek 很重要,因为你在用 readline 命令读取文件时,会移动你在文件中的当前位置,所以你需要把位置重置回文件的开头。否则,你可能会丢失一些数据。