如何将csv.Sniffer用于2种不同的CSV类型?

时间:2013-02-26 16:14:58

标签: python csv delimiter sniffer

我想阅读2种不同类型的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 个答案:

答案 0 :(得分:16)

Sniffer需要sample string,而不是文件。你需要做的就是:

dialect = csv.Sniffer().sniff(csvfile.readline(), [',',';'])
csvfile.seek(0)  
data = csv.reader(csvfile, dialect)

搜索很重要,因为您使用readline命令在文件中移动当前位置,并且需要重置回文件的开头。否则你会丢失数据。