Создание CSV-файла путем преобразования Json-вывода в CSV с помощью Pandas или библиотеки CSV/Json в Django

Я пытаюсь понять, как получить уже сделанный вывод Json, а также создать файл csv из этого вывода. Чтобы прояснить ситуацию, я создал json-файл с помощью write, но я не знаю, как создать CSV-файл во время того же процесса. Возможно, я просто не ввожу код CSV в правильную область, или Django нужен какой-то другой метод для обработки этого запроса.

utils.py

import json
import os
import pandas as pd

from django.utils import timezone
from django.http import HttpResponse
from django.db.models import Q
from api.models import BlockedList

def get_ip_list_json() -> dict:

    json_response = {
        "version": "",
        "description": "",
        "objects": [
            {
                "name": "",
                "id": "",
                "description": "",
                "ranges": ["2.2.2.2"],
            },
        ],
    }

    group_map = {}

    for ip in BlockedList.objects.filter(
        Q(end_date__isnull=True) | Q(end_date__gte=timezone.now())
    ).select_related("group"):
        group_id = str(ip.group.id)
        if group_id not in group_map:
            group_map[group_id] = {
                "name": ip.group.name,
                "id": ip.group.group_id,
                "description": ip.group.description,
                "ranges": [],
            }
        group_map[group_id]["ranges"].append(ip.address)

    json_response["objects"] = list(group_map.values())
    return json_response

def create_ip_file():
    try:
        base_dir = "C://Users/Steven/Desktop"
        filename = "blocklist.json"

        full_path = os.path.join(base_dir, filename)

        with open(full_path, "w") as f:
            f.write(json.dumps(get_ip_list_json(), indent=4))
    except Exception as e:
        print(e)

Вот мой вышеприведенный код, в котором я создаю выходной файл Json, ниже приведен код, который я пробовал, но не уверен, как вписать его в текущий процесс, или мне придется идти к этому в другом направлении.

with open("checkpoint_blocklist.json", enconding="utf-8") as inputfile:
     df = pd.read_json(inputfile)

df.to_csv("checkpoint.csv", encoding="utf-8", index=False)
data = get_ip_list_json()

json_data = json.loads(data)
df = pd.DataFrame(json_data)

csv_file = "test.csv"
df.to_csv(csv_file, index=False)
with open("checkpoint_blocktest.json") as inputfile:
   Data = json.loads(get_ip_list_json())

with open("test.csv", "w") as outfile:
   f = csv.writer(outfile)
   f.writerows(Data["Objects"])

Я пробовал реализовать эти три метода, но ничто не создает файл csv, я не уверен почему. Они также не создают ошибок при использовании этого util-файла, поэтому код читается, но файл не создается.

Simple.

Генерирование JSON-данных-> Запись JSON-данных в файл-> Преобразование JSON-данных в Pandas DataFrame-> Запись DataFrame в CSV-файл.

import json
import os
import pandas as pd

from django.utils import timezone
from django.http import HttpResponse
from django.db.models import Q
from api.models import BlockedList

def get_ip_list_json() -> dict:

    json_response = {
        "version": "",
        "description": "",
        "objects": [
            {
                "name": "",
                "id": "",
                "description": "",
                "ranges": ["2.2.2.2"],
            },
        ],
    }

    group_map = {}

    for ip in BlockedList.objects.filter(
        Q(end_date__isnull=True) | Q(end_date__gte=timezone.now())
    ).select_related("group"):
        group_id = str(ip.group.id)
        if group_id not in group_map:
            group_map[group_id] = {
                "name": ip.group.name,
                "id": ip.group.group_id,
                "description": ip.group.description,
                "ranges": [],
            }
        group_map[group_id]["ranges"].append(ip.address)

    json_response["objects"] = list(group_map.values())
    return json_response

def create_ip_file():
    try:
        base_dir = "C://Users/Steven/Desktop"
        json_filename = "blocklist.json"
        csv_filename = "blocklist.csv"

        # Create JSON file
        json_full_path = os.path.join(base_dir, json_filename)
        with open(json_full_path, "w") as f:
            json_data = get_ip_list_json()
            f.write(json.dumps(json_data, indent=4))
        
        # Convert JSON data to DataFrame
        objects = json_data["objects"]
        data_for_csv = []
        for obj in objects:
            for ip in obj["ranges"]:
                data_for_csv.append({
                    "name": obj["name"],
                    "id": obj["id"],
                    "description": obj["description"],
                    "ip_range": ip
                })

        df = pd.DataFrame(data_for_csv)

        # Create CSV file
        csv_full_path = os.path.join(base_dir, csv_filename)
        df.to_csv(csv_full_path, index=False)
    
    except Exception as e:
        print(e)
Вернуться на верх