Python 检测 csv 文件中的定界符/分隔符

问题描述 投票:0回答:2

我有一个函数可以读取和处理多个数据帧中的

*.csv
文件。

但是,并非所有

.csv
文件都具有相同的分隔符。有没有办法检测
.csv
文件具有哪种类型的分隔符,然后在 Pandas 的
read_csv()
函数中使用它?

df = pd.read_csv(path, sep = 'xxx',header = None, index_col = 0)
python pandas csv delimiter separator
2个回答
14
投票

更新

事实上,使用

engine='python'
作为
read_csv
的参数。它将尝试自动检测正确的分隔符。

sepstr,默认‘,’

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

使用

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')
' ' 

4
投票

正如 Reda El Hail 之前在评论中所说,设置参数

sep = None
,如下所示:

pandas.read_csv('data.csv',sep=None)

如果您使用 lib awswrangler 读取 s3 中的 csv 文件,您可以执行类似的操作:

awswrangler.s3.read_csv('s3://bucket/prefix', sep = None)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.