python panda读取csv_Python Pandas读取CSV或Ex

我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建一个数据帧。由于我无法预测用户将上载哪种文件类型,所以我将pd.read_csv()和pd.read_excel()包装在try/except块中。if form.validate_on_submit():

input_filename = secure_filename(form.file.data.filename)

try:

df = pd.read_csv(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')

except:

df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')

如果pd.read_csv()是try/except块中的第一个,并且我上载了一个.csv文件,则它可以工作。如果尝试上载.xlsx文件,则会出现以下错误:TypeError: expected str, bytes or os.PathLike object, not NoneType

如果pd.read_excel()是try/except块中的第一个,并且我上载了一个.xlsx文件,它就可以工作。如果尝试上载.csv文件,则会出现以下错误:pandas.io.common.EmptyDataError: No columns to parse from file

以前,我使用mimetype将文件路由到正确的pandas函数,但我希望有一个更干净(且包罗万象)的解决方案,不涉及多个if/elif语句。这就是我所拥有的:if form.file.data.mimetype == 'text/csv':

df = pd.read_csv(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')

elif form.file.data.mimetype == 'application/octet-stream':

df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')

elif form.file.data.mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':

df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')

else:

flash('Error Uploading File. Invalid file type. Please use xls, xlsx or csv.', 'danger')

return render_template('upload.html', current_user=current_user, form=form)

我正在使用Flask、WTForms和Python 3。谢谢您。

你可能感兴趣的:(python,panda读取csv)