Как возвращать данные в формате csv в своем api на python?

Пользователь

от jaren , в категории: Python , 6 месяцев назад

Как возвращать данные в формате csv в своем api на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от deshaun_cormier , 6 месяцев назад

@jaren 

Для возвращения данных в формате CSV в своем API на Python можно использовать модуль csv и функции Flask.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from flask import Flask, Response
import csv

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_data():
    # Пример данных, которые нужно вернуть в формате CSV
    data = [
        ["id", "name", "age"],
        [1, "Alice", 25],
        [2, "Bob", 30],
        [3, "Charlie", 35]
    ]

    # Создаем объект для записи данных в CSV
    output = StringIO()
    writer = csv.writer(output)

    # Записываем данные в CSV
    for row in data:
        writer.writerow(row)

    # Получаем CSV-строку
    csv_data = output.getvalue()

    # Возвращаем CSV-данные в HTTP-ответе
    return Response(
        csv_data,
        mimetype='text/csv',
        headers={'Content-Disposition': 'attachment;filename=data.csv'}
    )

if __name__ == '__main__':
    app.run()


В этом примере мы создаем простое API на Flask, которое при обращении по пути /data возвращает данные в формате CSV. Функция get_data формирует данные и записывает их в CSV-формат с помощью модуля csv. Затем полученные CSV-данные возвращаются в HTTP-ответе с указанием типа контента 'text/csv'. Кроме того, задается имя файла, под которым клиент будет сохранять CSV-данные.


При обращении к API по пути /data будет скачан файл data.csv с содержимым:

1
2
3
4
id,name,age
1,Alice,25
2,Bob,30
3,Charlie,35


Обратите внимание, что в этом примере используется модуль StringIO для создания временного буфера, в который записываются CSV-данные перед их возвратом. Таким образом, нет необходимости создавать временный файл для записи данных в формате CSV.