You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django中基于已有JSON输出生成CSV文件的实现疑问

问题描述

我现在碰到个技术问题:怎么基于已经生成的JSON输出创建CSV文件。目前我已经能生成JSON文件,但不知道怎么在同一个流程里同步生成CSV。可能是我放CSV代码的位置不对,或者Django需要特殊处理方式。

utils.py 导入部分

import json
import os
import pandas as pd
import csv
import urllib.parse

生成JSON的原有函数

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

编辑说明

下面是我参考Nayem的解决方案修改后的实现代码,只做了个性化调整,输出效果一致。

def create_ip_file():
    try:
        base_dir = ""
        csv_filename = ""

        csv_full_path = os.path.join(base_dir, csv_filename)

        # 查询BlockedList中的所有条目
        blockedlist = BlockedList.objects.all()
        data_for_csv = []
        for obj in blockedlist:
            # 格式化结束日期为dd/mm/yyyy
            formatted_end_date = obj.end_date.strftime("%d/%m/%Y")
            # URL编码原因字段,替换逗号等特殊字符
            encoded_reason = urllib.parse.quote(obj.reason)
            # 将数据添加到CSV转换列表
            data_for_csv.append({
                "NetworkAddress": obj.address,
                "Group": obj.group,
                "Reason": encoded_reason,
                "Expiry": formatted_end_date
                })

        # 将列表转换为pandas DataFrame
        df = pd.DataFrame(data_for_csv)

        # 从DataFrame创建CSV文件
        df.to_csv(csv_full_path, index=False)

    except Exception as e:
        # 打印发生的异常
        print(e)

内容的提问来源于stack exchange,提问作者Steve-o

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:02:13