我被分配了一项任务,涉及将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
有没有人知道这是为什么,以及我如何才能让函数按预期运行?谢谢。
发布于 2020-10-14 18:30:15
为此,我会避免使用正则表达式。它可以工作,但是如果你在处理路径,你应该使用一个处理路径的工具,比如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语句。match对象不等于True。你可以改为使用if mo:,这是可行的。但又一次..。pathlib!
发布于 2020-10-14 18:31:10
像这样的函数应该能做到这一点:
def ingest(file_name):
if file_name.endswith('.csv'):
df = pd.read_csv(file_name)
else:
df = pd.read_excel(file_name)
return dfhttps://stackoverflow.com/questions/64351316
复制相似问题