【问题标题】:convert json to csv and store it in a variable in python将 json 转换为 csv 并将其存储在 python 中的变量中
【发布时间】:2020-11-19 18:56:12
【问题描述】:

我正在使用 csv 模块将 json 转换为 csv 并将其存储在文件中或将其打印到 stdout。

def write_csv(data:list, header:list, path:str=None):
    # data is json format data as list
    output_file = open(path, 'w') if path else sys.stdout
    out = csv.writer(output_file)
    out.writerow(header)
    for row in data:
        out.writerow([row[attr] for attr in header])
    if path: output_file.close()

我想将转换后的 csv 存储到变量中,而不是将其发送到文件或标准输出。

说我想创建一个这样的函数:

def json_to_csv(data:list, header:list):
    # convert json data into csv string
    return string_csv

注意:数据格式很简单

数据是字符串到字符串映射的字典列表

[
    {
        "username":"srbcheema",
        "name":"Sarbjit Singh"
    },
    {
        "username":"testing",
        "name":"Test, user"
    }
]

我希望 csv 输出看起来像:

username,name
srbcheema,Sarbjit Singh
testing,"Test, user"

【问题讨论】:

    标签: python json python-3.x csv


    【解决方案1】:

    将 JSON 转换为 CSV 并非易事。它们之间也没有标准化的翻译方式......

    例如

    my_json = {
       "one": 1,
       "two": 2,
       "three": {
          "nested": "structure"
       }
    }
    

    可以用多种方式表示...

    这些都是(据我所知)有效的 CSV,其中包含来自 JSON 结构的所有信息。

    data
    '{"one": 1, "two": 2, "three": {"nested": "structure"}}'
    
    one,two,three
    1,2,'{"nested": "structure"}'
    
    one,two,three__nested
    1,2,structure
    

    本质上,您必须根据您对数据的了解找出两者之间的最佳转换。如何解决这个问题没有正确答案。

    【讨论】:

    • 我已经更新了数据格式,这是我要求的字符串映射的简单列表
    • 好的,您希望它如何表示为 CSV?
    【解决方案2】:

    我对 Python 比较了解,所以可能有更好的方法,但这可行:

    def get_safe_string(string):
        return '"'+string+'"' if "," in string else string
    
    def json_to_csv(data):
        csv_keys = data[0].keys()
        header = ",".join(csv_keys)
        res = list(",".join(get_safe_string(row.get(k)) for k in csv_keys) for row in data)
        res.insert(0,header)
        return "\n".join(r for r in res)
    

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 2012-02-09
      • 1970-01-01
      • 2020-02-01
      • 2019-08-10
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多