我正在尝试使用Python 2.7在PythonAnywhere上创建一个Flask Web应用程序,允许用户上传csv文件,然后将该文件读入pandas数据帧进行处理。该程序使用了我尝试过的一个csv文件,但没有使用其他文件。该程序似乎上传文件正常,但抛出一条错误消息#012IOError: File xyz.csv does not exist
。这是代码的相关部分:
from flask import Flask, make_response, request, send_file
import pandas as pd
# Initialize the Flask application
app = Flask(__name__)
@app.route('/')
def form():
return """
<html>
<body>
<h1>YDNA Kit Grouping Program</h1>
<form action="/main_program" method="post" enctype="multipart/form-data">
<input type="file" name="input_file" />
<input type="submit" />
</form>
</body>
</html>
"""
@app.route('/main_program', methods=["POST"])
def main_program_view():
# Input file
file = request.files['input_file']
if not file:
return "No file"
# Put input file in dataframe
df = pd.read_csv(file.filename, encoding='cp1252')
我认为问题可能出在file.filename
未提供pd.read_csv
所需的文件位置信息的最后一行代码中。但我不知道为什么它适用于一个csv文件而不是另一个csv文件并且不知道如何修复它以便它可以将任何上传的csv文件读入数据帧。
答案 0 :(得分:3)
PythonAnywhere员工能够指出我正确的解决方案。 pandas read_csv函数似乎需要一个path参数来读取csv文件。但是,由于所有相当小的Flask文件上传都存储在网络服务器的内存中,因此除非您将它们保存在某处,否则它们不会有路径。解决方案是将文件保存到Flask临时文件位置(或永久文件位置),然后使用保存文件的路径作为read_csv函数的路径参数:
import tempfile
tempfile_path = tempfile.NamedTemporaryFile().name
file.save(tempfile_path)
sheet = pd.read_csv(tempfile_path)