Загрузите CSV-файл с помощью Python Flask и обработайте его - PullRequest
2 голосов
/ 20 марта 2019

У меня есть следующий код для загрузки файла CSV с использованием 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)

Этот код работает нормально, и я могу успешно загрузить CSV-файл и прочитать его с помощью pandas dataframe. Но я сохраняю CSV в локальной файловой системе и читаю его.

Я пытался читать, как показано ниже -

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

Полученные результаты были в формате байтов, но мне нужно в формате словаря. Поэтому я использовал pandas dataframe, чтобы прочитать его, а затем преобразовал в пользовательский словарь моего формата.

Можно ли читать файл CSV на лету, не записывая его в локальную файловую систему? Или любой другой эквивалентный способ, которым мы можем добиться с помощью Python Flask Restful?

1 Ответ

2 голосов
/ 20 марта 2019

(Не очень удачно названное, потому что это один файл) files переменная содержит объект werkzeug.datastructures.FileStorage .Это файл-подобный объект (содержащий read() метод), и как таковой его можно использовать непосредственно в качестве ввода в pandas.read_csv(), как видно из документации панд .

Таким образом, решение не сохранять на диск так же просто, как:

class UploadCSV(Resource):

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