如何对两种不同的CSV类型使用csv.Sniffer?

9 投票
1 回答
17154 浏览
提问于 2025-04-17 17:12

我想读取两种不同类型的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 命令读取文件时,会移动你在文件中的当前位置,所以你需要把位置重置回文件的开头。否则,你可能会丢失一些数据。

撰写回答