需要从json字段和数组生成CSV文件.

JSON文件包含一个字段和一个array.我需要创建一个CSV文件,其中一个作为字段,另一个具有从数组中检索的值.

输入:

{
  "Emp": {
    "EmpID": SE451,
    "EMpName": "Vincent",
    "Leaves": [
      {
        "leave": 2
      },
      {
        "leave": 1
      }
    ]
}

expectedCSV应该是这样的,

E_name E_leaves
Vincent 2
1

为此,我try 使用下面的代码,但它不能像预期的那样工作.

Fl_content = []
dat_content=[]
emp_ids = ('E_name','E_Leaves')
hdr = ','.join(emp_ids)
for ar in json_data['Emp']['Leaves']:
  Fl_content.append(str(ar['leave']))

leave_data = '\n'.join(Fl_content)
leave_with_header = json_data['Emp']['EmpName'], leave_data
dat3 = ','.join(leave_with_header)
#print(dat3)
hdr+'\n'+dat3

我得到的CSV字符串是E_name,E_leaves\nVinent,2\n1

我的CSV文件如下所示(这是意想不到的),

E_name E_leaves
Vincent 2
1

注:我正在使用云函数上传GCS存储桶中的CSV. 因此,我想使用CSV字符串概念来实现这一点.

帮助我实现上面所说的预期目标.

推荐答案

对于E_name字段,您需要在第一行之后填充空字符串. 此外,更好的做法是首先呈现行,然后通过迭代它们来组成CSV字符串.

def render_csv_str(data: dict) -> str:
    headers = ['E_name', 'E_leaves']
    rows = []
    index = 0
    for ar in data['Emp']['Leaves']:
        if index == 0:
            rows.append((data['Emp']['EmpName'], f"{ar['leave']}"))
        else:
            rows.append(('', f"{ar['leave']}"))

        index = index + 1

    csv_str = ','.join(headers)
    csv_str += '\n'
    for row in rows:
        csv_str += ','.join(row)
        csv_str += '\n'

    return csv_str


if __name__ == '__main__':
    test_dict = {
        "Emp": {
            "EmpID": 'SE451',
            "EmpName": "Vincent",
            "Leaves": [{
                "leave": 2
            },
            {
                "leave": 1
            }]
        }
    }

    print(render_csv_str(test_dict))

Python相关问答推荐

如何在where或过滤器方法中使用SQLAlchemy hybrid_Property?

为什么Pydantic在我申报邮箱时说邮箱丢失

Python tkinter关闭第一个窗口,同时打开第二个窗口

手动为pandas中的列上色

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

从包含数字和单词的文件中读取和获取数据集

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

Python plt.text中重叠,包adjust_text不起作用,如何修复?

根据给定日期的状态过滤查询集

Pythind 11无法弄清楚如何访问tuple元素

pandas DataFrame GroupBy.diff函数的意外输出

仿制药的类型铸造

标题:如何在Python中使用嵌套饼图可视化分层数据?

管道冻结和管道卸载

如何过滤包含2个指定子字符串的收件箱列名?

当独立的网络调用不应该互相阻塞时,'

我对我应该做什么以及我如何做感到困惑'

Python+线程\TrocessPoolExecutor

从Windows Python脚本在WSL上运行Linux应用程序

OpenCV轮廓.很难找到给定图像的所需轮廓