Создание 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)