【问题标题】:Python detection of delimiter/separator in a csv filePython 检测 csv 文件中的分隔符/分隔符
【发布时间】:2021-12-17 08:56:23
【问题描述】:

我有一个函数可以读取和处理多个数据帧中的*.csv 文件。

但是,并非所有 CSV 文件都具有相同的分隔符。那么,python是如何检测出csv文件有哪一种分隔符,然后在read_csv()函数中使用到pandas中读取呢?

df = pd.read_csv(path, sep = 'xxx',header = None, index_col = 0)

【问题讨论】:

    标签: python pandas csv delimiter separator


    【解决方案1】:

    更新

    其实就是用engine='python'作为read_csv的参数。它会尝试自动检测正确的分隔符。

    sepstr,默认‘,’

    要使用的分隔符。如果 sep 为 None,C 引擎无法自动检测分隔符,但 Python 解析引擎可以,这意味着将使用后者并通过 Python 的内置嗅探器工具 csv.Sniffer 自动检测分隔符。此外,长度超过 1 个字符且不同于 '\s+' 的分隔符将被解释为正则表达式,并且还将强制使用 Python 解析引擎。请注意,正则表达式分隔符容易忽略引用的数据。正则表达式示例:'\r\t'。

    使用csv.Sniffer:

    import csv
    
    def find_delimiter(filename):
        sniffer = csv.Sniffer()
        with open(filename) as fp:
            delimiter = sniffer.sniff(fp.read(5000)).delimiter
        return delimiter
    

    演示:

    >>> find_delimiter('data.csv')
    ','
    
    >>> find_delimiter('data.txt')
    ' ' 
    

    【讨论】:

    • fp.read() 中的 5000 值是否有原因?
    • 只是最大缓冲区大小以避免读取整个文件。我认为 5000 字节足以确定分隔符。
    • 哇!有用 !!!我看到了其他帖子,它们遍历了可能的分隔符列表,但很可能会出错。不过,有了你的回答,效果真的很好!!
    • 很高兴看到:D 感谢您的投票。
    猜你喜欢
    • 2014-07-08
    • 2015-08-09
    • 2016-03-12
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多