我正在使用 Flask 从网站收集上传的 excel 文件。
我想将这些 excel 文件转换为 Pandas DataFrame。
如何使用 pd.ExcelFile() 函数指定文件对象而不是路径?
我的代码如下,我的file_input[N]对象是上传的文件。
@app.route('/', methods = ['POST'])
def upload_file():
uploaded_files = [x for x in [file_input1, file_input2, file_input3, file_input4, file_input5] if x.filename]
#Button should do no nothing if no files uploaded.
if uploaded_files = []:
return redirect(url_for('/'))
combined_cashflows = pd.DataFrame()
for uploaded_file in uploaded_files:
###Need a line here to convert uploaded file into dataframe###
return redirect(url_for('download_page'))
可以使用pd.read_excel()函数直接从内存中读取上传的文件,转换成Pandas DataFrame。
这是一个示例,说明如何修改代码以将上传的文件转换为 Pandas DataFrames:
import io
@app.route('/', methods = ['POST'])
def upload_file():
uploaded_files = [x for x in [file_input1, file_input2, file_input3, file_input4, file_input5] if x.filename]
#Button should do no nothing if no files uploaded.
if not uploaded_files:
return redirect(url_for('/'))
combined_cashflows = pd.DataFrame()
for uploaded_file in uploaded_files:
# Read the uploaded file into memory as bytes
file_contents = uploaded_file.read()
# Convert the bytes into a file-like object
file_obj = io.BytesIO(file_contents)
# Read the file-like object into a Pandas DataFrame
df = pd.read_excel(file_obj)
# Append the DataFrame to the combined_cashflows DataFrame
combined_cashflows = pd.concat([combined_cashflows, df], ignore_index=True)
return redirect(url_for('download_page'))
在此示例中,io.BytesIO() 用于从上传的文件创建类文件对象,然后使用 pd.read_excel() 将类文件对象读入 Pandas DataFrame。最后,使用 pd.concat() 方法将 DataFrame 连接到 combined_cashflows DataFrame。