我试图将许多JSON文件写入CSV文件。每个JSON文件有几个键,但是不同的文件有不同的键。下面是三个JSON文件作为示例。
A档案:
{"a": 1, "c": 2}档案B:
{"b": 5, "d": 3}C档案:
{"a": 6, "b": 7}我想要这样一个CSV文件,它有四列三行(为了简单起见省略逗号):
a b c d
1 2
5 3
6 7 实现这一目的的一种方法是使用csv编写器进行多次try/ way语句。但这是不可行的,因为我正在处理大量的钥匙。还有别的选择吗?
发布于 2016-08-23 00:55:51
您可以将每个JSON文件附加到一个列表中,然后创建dataframes并进行连接。
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发布于 2016-08-23 00:57:15
假设您提前知道了所有可能的字段名,csv.DictWriter已经提供了一个解决方案,那么对构造函数使用restval参数:
如果行读取的字段少于字段名序列,则剩下的键接受可选
restval参数的值。
因此,指定csv.DictWriter(..., restval=" ")将用单个空格替换任何缺失的值,尽管默认情况下,restval设置为"" (一个空字符串),这对您可能更有用。
基本上,您的代码如下所示:
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))发布于 2016-08-23 00:55:05
您可以用缺少的键加载每个字典,并给出它们的空值。所以它可能看起来像这样
for items in list:
for x in ['a','b','c','d']:
if x not in item:
item[x] = ""现在每个字典都有相同的键,您应该能够轻松地以您想要的格式编写csv。
https://stackoverflow.com/questions/39090683
复制相似问题