使用Python Flask上传CSV文件并处理它

10
我有以下代码,使用Python FLASK上传CSV文件。

我有以下代码,使用Python FLASK上传CSV文件。

from flask_restful import Resource
import pandas as pd

ROOT_PATH = os.path.dirname(os.path.abspath(__file__))

class UploadCSV(Resource):

    def post(self):
        files = request.files['file']
        files.save(os.path.join(ROOT_PATH,files.filename))
        data = pd.read_csv(os.path.join(ROOT_PATH,files.filename))
        print(data)

api.add_resource(UploadCSV, '/v1/upload')

if __name__ == '__main__':
    app.run(host='localhost', debug=True, port=5000)

这段代码很好用,我可以成功上传CSV文件,并使用pandas dataframe读取它。但是,我将CSV文件保存在本地文件系统中并进行读取。

我已尝试以下方式进行读取 -

files = request.files['file']
files.read()

我得到的结果是以字节格式呈现的,但我需要它以字典格式呈现。所以我使用了pandas dataframe来读取它,然后将其转换为我的自定义字典格式。

在不将文件写入本地文件系统的情况下,能否实时读取CSV文件?或者有没有等效的方法可以使用Python Flask Restful来实现?


你看到了 https://dev59.com/6mIj5IYBdhLWcg3wq2xz 吗? - Arunmozhi
@Arunmozhi 感谢您的回复。是的,我已经尝试使用 read() 读取它,但结果是以字节形式呈现的。为了更清晰明确,我编辑了问题。 - Dinesh
1个回答

13
(因为它只包含一个文件,所以不太恰当地命名)files变量包含一个werkzeug.datastructures.FileStorage对象。这是一个类似文件的对象(包含一个read()方法),因此可以直接将其作为输入传递给pandas.read_csv(),如pandas文档中所示。

因此,避免保存到磁盘的解决方案就是:

class UploadCSV(Resource):

    def post(self):
        file = request.files['file']
        data = pd.read_csv(file)
        print(data)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接