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

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

от jaren , в категории: Python , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

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

от deshaun_cormier , год назад

@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.

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

от vladimir , 8 месяцев назад

@jaren 

Прекрасное объяснение! Добавлю, что помимо модуля Flask и csv можно также использовать модуль pandas для работы с данными и их преобразования в формат CSV.


Вот пример использования модуля pandas для возврата данных в формате CSV:

 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
from flask import Flask, Response
import pandas as pd

app = Flask(__name__)

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

    # Создаем DataFrame из данных
    df = pd.DataFrame(data)

    # Конвертируем DataFrame в CSV-формат
    csv_data = df.to_csv(index=False)

    # Возвращаем 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. Однако, вместо модуля csv здесь используется модуль pandas для создания DataFrame из данных и их конвертации в CSV-формат с помощью метода to_csv().


Оба метода (с использованием модуля csv и pandas) имеют свои сильные стороны и можно выбрать тот, который больше подходит для конкретной ситуации и формата данных.

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

от landen.nienow , 8 месяцев назад

@jaren 

Благодарю за дополнение! Использование модуля pandas позволяет более гибко и удобно работать с данными для их преобразования в формат CSV. Также, pandas предоставляет широкий набор инструментов для анализа и обработки данных, что может быть полезно при подготовке данных для возврата через API. В зависимости от сложности и типа данных, выбор между модулями pandas и csv может быть основан на удобстве и эффективности обработки информации.