结合pd.read\u csv和pd.read\u excel

2024-04-28 20:46:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我被分配了一项任务,其中包括将pd.read_csv()pd.read_excel()函数合并成一个名为ingest()的函数。我一直在尝试使用正则表达式,以便如果文件包含“.csv”,它将执行read_csv()函数,否则它将作为excel文件读取

这是到目前为止我的代码

    rexf = re.compile((r'.csv'))
    mo = rexf.search(dataframe)
    if mo == True:
        df = pd.read_csv(dataframe)
    else:
        df = pd.read_excel(dataframe)
    return df

然后我用一个名为“Smoking.csv”的文件调用这个函数。当我使用pd.read_csv()命令时,这个文件可以工作,但在这里它变得异常,并给出了这个错误

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found

有人知道为什么会这样吗?我如何才能使函数按预期的方式运行?谢谢


Tags: 文件csv函数代码redataframedfread
2条回答

我会避免使用正则表达式。它会起作用,但是如果您正在处理路径,您应该使用一个工具来处理路径,比如pathlib:

from pathlib import Path

import pandas as pd


def ingest(filename):
    path = Path(filename)
    if path.suffix == ".csv":
        df = pd.read_csv(dataframe)
    else:
        df = pd.read_excel(dataframe)
    return df

正则表达式不工作的原因是因为if语句。匹配对象不等于True。您可以改为执行if mo:,这将有效。但是再一次。。。pathlib

像这样的函数应该可以做到这一点:

def ingest(file_name):
   if file_name.endswith('.csv'):
      df = pd.read_csv(file_name)
   else:
      df = pd.read_excel(file_name)
   return df


相关问题 更多 >