Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将JSON转换为CSV_Python_Json_Csv - Fatal编程技术网

Python 将JSON转换为CSV

Python 将JSON转换为CSV,python,json,csv,Python,Json,Csv,我正在尝试将一个不是真正的json文件转换为csv文件,下面是代码 import json import gzip import csv def parse(path): g = gzip.open(path, 'r') for l in g: yield json.dumps(eval(l)) csvOut = gzip.open("meta_Musical_Instruments.csv", 'w') writer = csv.writer(csvOut) fiel

我正在尝试将一个不是真正的json文件转换为csv文件,下面是代码

import json
import gzip
import csv


def parse(path):
  g = gzip.open(path, 'r')
  for l in g:
    yield json.dumps(eval(l))


csvOut = gzip.open("meta_Musical_Instruments.csv", 'w')
writer = csv.writer(csvOut)

fields = ["asin"]

for product in parse("meta_Musical_Instruments.json.gz"):
  line = []
  for f in fields:
    if product.has_key(f): line.append(product[f])
    else: line.append("")
  writer.writerow(line)
示例文件如下所示:

{'asin': '0014072149', 'related': {'also_viewed': ['B0058DK7RA'], 'buy_after_viewing': ['B0058DK7RA']}, 'title': 'Double Concerto in D Minor By Johann Sebastian Bach. Edited By David Oistrach. For Violin I, Violin Ii and Piano Accompaniment. Urtext. Baroque. Medium. Set of Performance Parts. Solo Parts, Piano Reduction and Introductory Text. BWV 1043.', 'price': 18.77, 'salesRank': {'Musical Instruments': 94593}, 'imUrl': 'http://ecx.images-amazon.com/images/I/41m6ygCqc8L._SY300_.jpg', 'brand': '', 'categories': [['Musical Instruments']], 'description': 'Composer: J.S. Bach.Peters Edition.For two violins and pianos.'}
执行代码后,我得到了以下错误消息:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-14-1cb41fc12b41> in <module>()
     16   line = []
     17   for f in fields:
---> 18     if product.has_key(f): line.append(product[f])
     19     else: line.append("")
     20   writer.writerow(line)

AttributeError: 'str' object has no attribute 'has_key'

请帮忙

使用双引号而不是单引号。JSON只允许双引号


“key”->key

您似乎对json.dumps的作用感到困惑。。。JSON是一种文本格式——数据的文本表示。json模块允许您将Python对象编码为json,或将json字符串解码为Python对象。dumpspython_obj执行Python到json编码并返回字符串。要将json字符串解码为Python对象,必须使用json.loadsjson_字符串。瞧,你的解析函数应该是这样的:

def parse(path):
  g = gzip.open(path, 'r')
  for l in g:
    yield json.loads(l)
如果不知道您的非真正的json文件包含什么,我无法判断它是否会起作用,但这肯定是您应该使用json将json字符串解码为Python对象的方式


作为旁注:Python中eval的实际用例非常罕见——我从1.5.2天起就一直在用Python编程,到目前为止从未使用过它——因此,如果您发现自己在使用eval,有99.999%的几率会出错。

json.dumpsevall什么是什么?请摘录一个最小的示例。硬编码文件内容。呃,问题是。。。大部分是显而易见的。我喜欢理解提问者有时的想法,这样我可以给出一个完整的答案。是的,提问者已经注意到输入不完全是JSON。他正在解析JSON,所以当他向程序提供一个非JSON对象时,会变得不高兴,实际上他们不是。此外,该错误并没有抱怨“str”对象没有属性“has_key”,它似乎在寻找属性“has_key”,它似乎在寻找由双引号定义的JSON密钥。不是这样吗?JSON是一个字符串。has_key是一种dict方法。