欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Python下利用json将数据写入文件

程序员文章站 2024-02-03 11:17:40
...

本人是在win7 64位系统,利用Anaconda安装的Python3.6环境下进行的相关测试。

我们经常会遇到有些官方release的代码我们无法运行或出错,一方面是因为一些相关路径需要根据自己的机器进行设置;另一方面就是操作系统的问题,比如一些依赖库和编解码的问题,这个在有些系统中是默认安装的,有些或是不兼容等,而有些人在release代码的时候从交代自己的开发环境,如Python版本,操作系统,编译环境和一些依赖库等,这样的话程序出错了我们也无从下手。尤其是在深度学习领域,像一些深度学习库在配置的时候严格依赖开发环境,希望大家在以后release代码的时候先详细交代一下所用的开发环境。

下面要讲的关于Python下利用json将数据写入文件,有时无法写入或出错,大都是关于操作系统默认的编解码方案不同造成的,比如Ubuntu系统与Windows系统,默认的编解码方案就不同,导致有些程序直接拿来在Windows系统上运行就会出错或无法运行。如下程序所示:

import json

with open(os.path.join(out_dir, json_name % data_set), 'wb') as outfile:
 	outfile.write(json.dumps(ann_dict))

这段代码直接在Win7系统下就会无法运行,而下面三段代码均可正确运行。

方法1:

import json
import codecs

with open(os.path.join(out_dir, json_name % data_set), 'wb') as outfile:
	json.dump(ann_dict, codecs.getwriter('utf-8')(outfile), ensure_ascii=False)

方法2:

import json

with open('data.txt', 'w') as f:
	json.dump('abcdefGH', f, ensure_ascii=False)

方法3:

import io
import json

with io.open('C:/usr/data.txt', 'w', encoding='utf-8') as f:
	f.write(json.dumps('Hello world!', ensure_ascii=False))

在上述代码中,可以看到方法2是最简单的。同时也应注意到一点不同,如'wb'与'w'的区别,binary mode doesn't take an encoding argument, json.dump与json.dumps的区别,关于它们的区别可参考该篇博文