首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用Python的文件有不同的键时,如何将JSON转换为CSV?

当使用Python的文件有不同的键时,如何将JSON转换为CSV?
EN

Stack Overflow用户
提问于 2016-08-23 00:41:52
回答 4查看 2.2K关注 0票数 1

我试图将许多JSON文件写入CSV文件。每个JSON文件有几个键,但是不同的文件有不同的键。下面是三个JSON文件作为示例。

A档案:

代码语言:javascript
复制
{"a": 1, "c": 2}

档案B:

代码语言:javascript
复制
{"b": 5, "d": 3}

C档案:

代码语言:javascript
复制
{"a": 6, "b": 7}

我想要这样一个CSV文件,它有四列三行(为了简单起见省略逗号):

代码语言:javascript
复制
a b c d

1   2 

  5   3

6 7 

实现这一目的的一种方法是使用csv编写器进行多次try/ way语句。但这是不可行的,因为我正在处理大量的钥匙。还有别的选择吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-23 00:55:51

您可以将每个JSON文件附加到一个列表中,然后创建dataframes并进行连接。

代码语言:javascript
复制
a = {"a": 1, "c": 2}
b = {"b": 5, "d": 3}
c = {"a": 6, "b": 7}
data = [a, b, c]

>>> pd.concat([pd.DataFrame(s, index=[0]) for s in data]).reset_index()
    a   b   c   d
0   1 NaN   2 NaN
1 NaN   5 NaN   3
2   6   7 NaN NaN
票数 2
EN

Stack Overflow用户

发布于 2016-08-23 00:57:15

假设您提前知道了所有可能的字段名,csv.DictWriter已经提供了一个解决方案,那么对构造函数使用restval参数:

如果行读取的字段少于字段名序列,则剩下的键接受可选restval参数的值。

因此,指定csv.DictWriter(..., restval=" ")将用单个空格替换任何缺失的值,尽管默认情况下,restval设置为"" (一个空字符串),这对您可能更有用。

基本上,您的代码如下所示:

代码语言:javascript
复制
import csv, json
all_fields = ["a","b","c","d"]
all_files = ["A.json","B.json","C.json"]

with open("OUTPUT.csv", "w") as output_file:
    writer = csv.DictWriter(output_file,all_fields)
    writer.writeheader()

    for filename in all_files:
        with open(filename,"r") as in_file:
            writer.writerow(json.load(in_file))
票数 4
EN

Stack Overflow用户

发布于 2016-08-23 00:55:05

您可以用缺少的键加载每个字典,并给出它们的空值。所以它可能看起来像这样

代码语言:javascript
复制
for items in list:
    for x in ['a','b','c','d']:
        if x not in item:
            item[x] = ""

现在每个字典都有相同的键,您应该能够轻松地以您想要的格式编写csv。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39090683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档