Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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 将dicts导出到json文件_Python_Json_List_Python 2.7_Dictionary - Fatal编程技术网

Python 将dicts导出到json文件

Python 将dicts导出到json文件,python,json,list,python-2.7,dictionary,Python,Json,List,Python 2.7,Dictionary,我有一个dicts j列表,我想将一些dicts导出为一个名为myFile.json的json文件: 我可以用try来做,但我想知道是否有一种更像python的方法来做 我的代码根本不值得写 try: with io.open(myFile.json, 'a', encoding='utf-8') as f: f.write(unicode(json.dumps(item, ensure_ascii=False))) f.write(u",") excep

我有一个dicts j列表,我想将一些dicts导出为一个名为myFile.json的json文件:

我可以用try来做,但我想知道是否有一种更像python的方法来做

我的代码根本不值得写

try:
    with io.open(myFile.json, 'a', encoding='utf-8') as f:
        f.write(unicode(json.dumps(item, ensure_ascii=False)))
        f.write(u",")
except IOError:
    with io.open(myFile.json, 'w', encoding='utf-8') as f:
        f.write(u"[")
    with io.open(myFile.json, 'a', encoding='utf-8') as f:
        f.write(unicode(json.dumps(item, ensure_ascii=False)))
        f.write(u",")

        # ..etc
编辑 输出文件应为json数组:

[ {"key1":"value1","key2":"value2"},{"key1":"value3","key2":"value4"}]

您的方法有一个严重的缺陷:如果您正在编写[首先,您还需要在写入的每个JSON值后添加逗号,您必须附加结束符],然后每次附加到文件时,您必须删除最后一个]结束符,或者在阅读时在解码前手动添加]结束符

最好不要构建一个大的JSON列表,而是使用换行符作为分隔符。通过这种方式,您可以自由附加数据,并且可以轻松地再次加载数据

这样做的另一个好处是大大简化了代码:

with io.open(myFile.json, 'a', encoding='utf-8') as f:
    f.write(unicode(json.dumps(item, ensure_ascii=False)))
    f.write(u'\n')
这样就不需要首先测试现有文件。阅读很简单:

with open(myFile.json) as f:
    for line in f:
        data = json.loads(line)

您的方法有一个严重的缺陷:如果您正在编写[首先,您还需要在写入的每个JSON值后添加逗号,您必须附加结束符],然后每次附加到文件时,您必须删除最后一个]结束符,或者在阅读时在解码前手动添加]结束符

最好不要构建一个大的JSON列表,而是使用换行符作为分隔符。通过这种方式,您可以自由附加数据,并且可以轻松地再次加载数据

这样做的另一个好处是大大简化了代码:

with io.open(myFile.json, 'a', encoding='utf-8') as f:
    f.write(unicode(json.dumps(item, ensure_ascii=False)))
    f.write(u'\n')
这样就不需要首先测试现有文件。阅读很简单:

with open(myFile.json) as f:
    for line in f:
        data = json.loads(line)

我不明白,如果可以向文件中添加数据,那么文件中怎么会有有效的JSON。此外,还需要修复缩进。据推测,异常捕获应该与try处于同一级别。此代码不运行,对吗?if item['start']=True:您想要的内容更像:if item['start'],其中item['start']是布尔值,而不是字符串。@hughdbrown我没有有效的json文件,但我想创建它。代码运行,但没有真正的内容,我写的只是一个例子。我很困惑,为什么不能在编写之前将它们全部合并到一个列表中,应该只在处理结束时执行文件I/o。我还不明白为什么不能打开文件,读入数据,执行json.loads,然后在重写之前将内容附加到列表中。我试着做你想做的事情,这是一个非常头痛的问题,通常你会错过一些关于格式的东西,并且会被格式几乎很好的JSON所困扰。我不明白如果你能在文件中添加数据,你怎么能在文件中有有效的JSON。此外,还需要修复缩进。据推测,异常捕获应该与try处于同一级别。此代码不运行,对吗?if item['start']=True:您想要的内容更像:if item['start'],其中item['start']是布尔值,而不是字符串。@hughdbrown我没有有效的json文件,但我想创建它。代码运行,但没有真正的内容,我写的只是一个例子。我很困惑,为什么不能在编写之前将它们全部合并到一个列表中,应该只在处理结束时执行文件I/o。我还不明白为什么不能打开文件,读入数据,执行json.loads,然后在重写之前将内容附加到列表中。我试着做你想做的事情,这是一个非常头痛的问题,通常你会错过一些关于格式的东西,并被困在格式几乎很好的JSONTANK you@Martijn第二个代码对我来说很好,但为什么它不创建文件,如果它不存在,如果我添加了这个openmyfile,它就不工作了,“w”。是否在之前关闭?@4m1nh4j1:在附加模式下打开文件会为您创建不存在的文件。谢谢@Martijn第二个代码对我很好,但为什么它不创建不存在的文件,并且如果我添加了此openmyfile则无法工作,“w”.close before?@4m1nh4j1:如果文件不存在,则以追加模式打开文件会为您创建该文件。