【问题标题】:How to use csv.Sniffer for 2 different CSV-types?如何将 csv.Sniffer 用于 2 种不同的 CSV 类型?
【发布时间】:2013-02-26 16:14:57
【问题描述】:

我想读取 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 = ";")

有人可以帮帮我吗?

【问题讨论】:

    标签: python csv delimiter sniffer


    【解决方案1】:

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

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

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

    【讨论】:

    • 当嗅探器的唯一目的是在没有先验知识的情况下确定分隔符时,列出分隔符有什么意义?
    • @VaidøtasI。关键是限制它可以找到的分隔符,避免奇怪的分隔符检测。在我的一项测试中,嗅探器发现“B”是我的分隔符..这显然不是我真正的 csv 分隔符。
    • @Quentin,哦,好吧
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2018-11-20
    • 2020-08-18
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多