Upload CSV file using Python Flask and process it

跟風遠走 提交于 2020-12-01 10:59:46

问题


I have the following code to upload an CSV file using Python FLASK.

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)

This code works fine and I can able to upload CSV file successfully and read it using pandas dataframe. But I'm saving the csv in local filesystem and reading it.

I have tried reading like below -

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

The results obtained were in the format of bytes but I need it in the format of dictionary. So I used pandas dataframe to read it and I later convert it into a custom dictionary of my format.

Is it possible to read the CSV file on the fly without writing it in local filesystem? Or any equivalent way we can achieve using Python Flask Restful?


回答1:


The (not so aptly named, due to it being one file) files variable contains a werkzeug.datastructures.FileStorage object. This is a file like object (containing a read() method), and as such it is possible to use it directly as input to pandas.read_csv()as seen in the pandas documentation.

Thus, the solution to not save to disk is as simple as:

class UploadCSV(Resource):

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


来源:https://stackoverflow.com/questions/55253829/upload-csv-file-using-python-flask-and-process-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!