【问题标题】:Combining pd.read_csv and pd.read_excel [duplicate]结合 pd.read_csv 和 pd.read_excel [重复]
【发布时间】:2021-01-28 17:48:39
【问题描述】:

我被分配了一项任务,其中涉及将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

有谁知道为什么会这样,以及如何让函数按预期运行?谢谢。

【问题讨论】:

  • 检查mo 是什么。它要么是re.Match 对象,要么是None,它们都不会是== True,所以你永远不会使用pd.read_csv,它会一直使用pd.read_excel

标签: python pandas re


【解决方案1】:

这样的功能应该可以做到:

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


【讨论】:

  • 谢谢你,这是一个真正的保存
【解决方案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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2019-04-30
    • 2020-07-04
    • 2020-06-26
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多