python dict json读写文件
来源:互联网 发布:上海汇软科技骗局知乎 编辑:程序博客网 时间:2024/05/21 08:03
原文:http://www.cnblogs.com/lingluo/p/6075309.html
# -*- coding: utf-8 -*-import jsonimport timedef store(data): with open('data.json', 'w') as json_file: json_file.write(json.dumps(data))def load(): with open('data.json') as json_file: data = json.load(json_file) return dataif __name__ == "__main__": data = {} data["last"]=time.strftime("%Y%m%d") store(data) data = load() print data["last"]
除了跨平台性极好的xml和json之外,python要提到的还有自身最常用pickle模块。在使用上,python的常用模块接口漂亮而简单,而且json跟pickle二者使用一模一样。首先来看一下用法,代码如下:
import
json,pickle
#导入模块。
data
=
{
'name'
:
"lixin"
,
'sex'
:
"female"
,
'height'
:
1.58
,
'weight'
:
82
,
'utterance'
:
'奏是这么瘦,来打我啊'
}
jsondata
=
json.dumps(data)
#转json数据
pythondata1
=
json.loads(jsondata)
#json数据转python
print
(pythondata1)
pickledate
=
pickle.dumps(data)
#转持久化数据
pythondata2
=
pickle.loads(pickledate)
#转回python
print
(pythondata2)
以上代码,在python3.5里运行无误,utf-8编码汉字可识别。然而,大多数时候,数据的解析不仅仅是使用,更多的是为了储存。无关联型大多储存形式是以文本储存,因此我们需要把数据写入文本。python的常规文本写入是只支持字符串的,json和pickle在写入文本都有自己的方法接口,和普通数据转换接口也极好区分,去掉末尾的s即可。代码如下:
with
open
(
"jsondata.json"
,
"w"
) as
file
:
#打开一个名为jsondata.json文本,只能写入状态 如果没有就创建
json.dump(data,
file
)
#data转换为json数据格式并写入文件
file
.close()
#关闭文件
with
open
(
"jsondata.json"
,
"r"
) as
file
:
#打开文本读取状态
l
=
json.load(
file
)
#解析读到的文本内容 转为python数据 以一个变量接收
print
(l)
#打印变量
file
.close()
#关闭文件
pickle的使用方式基本一样只是写入的文本格式为txt或者pk。当然json也可以直接写入txt。以上代码在python3.5运行无误(不排除人品不好)。看起来简洁方便,似乎毫无难点,那么来愉快的谈一下使用中常见的坑
不管你要读什么,反正我一点数据也没有:
Traceback (most recent call last):
File
"/Users/penglong/Documents/python/s10/day3/test.py"
, line
13
,
in
<module>
l
=
json.load(
file
)
File
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py"
, line
268
,
in
load
parse_constant
=
parse_constant, object_pairs_hook
=
object_pairs_hook,
*
*
kw)
File
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py"
, line
319
,
in
loads
return
_default_decoder.decode(s)
File
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py"
, line
339
,
in
decode
obj, end
=
self
.raw_decode(s, idx
=
_w(s,
0
).end())
File
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py"
, line
357
,
in
raw_decode
raise
JSONDecodeError(
"Expecting value"
, s, err.value)
from
None
json.decoder.JSONDecodeError: Expecting value: line
1
column
1
(char
0
)
报错如上,原因十分明显,json没有内容可解析,一般直接从文件中进行排除,会发现读取的文本是空白,也就是说在写入数据的时候就已经发生了错误。但代码并没有报错,如果没有进行写入检测的话,差不多就卡这了,这个原因很简单,大部分是因为在写入时候调用的接口是dumps而不是dump,程序本身可以编译通过,但实际上没有文本写入。导致读取的时候直接报错。如果遇到这个问题,去排查一下写入数据时调用的接口。
不管你要我写什么,反正我就是写不进去:
File
"/Users/penglong/Documents/python/s10/day3/test.py"
, line
17
,
in
<module>
pickle.dump(data,
file
)
TypeError: write() argument must be
str
,
not
bytes
报错如上,此错误针对pickle写入,原因也很明显,写入必须是字符串,我猜json不报错的原因很大程度是因为它长的比较像字符串。。忽略这个不靠谱的想法。这个引发的错误留给下一个。解决代码如下:(ps:在2.7里面敲是没遇到这个毛病的,在3.5里面一定要在"wb"状态下才能正常写入。)
with
open
(
"pickle.pk"
,
"wb"
) as
file
:
#改参数"w"为"wb" 代表二进制写入
pickle.dump(data,
file
)
file
.close()
以上,json的错误完全相反,可能报错为TypeError: a bytes-like object is required, not 'str',完全不用举例了,是踩进了pickle的坑里,直接把"wb"状态改回"w"即可解决。然而总有那么些时候并不在意强扭的瓜甜不甜,仅仅是想强行把它给扭下来。假如犯了强迫症,一定要在wb的状态下使用,那么,解决代码如下:(ps:严重不推荐使用。。其实就是我半天不知道毛病在哪,头痛医头脚痛医脚,不管原因,强行把它给写进去了,虽然运行和结果都没错,但肯定有什么地方不对)
)
with
open
(
"jsondata.json"
,
"wb"
) as
file
:
file
.write((json.dumps(data).encode(
"utf-8"
)))
#强制以utf-8转一下byte数据再以普通形式写入 。
file
.close()
不管你要做什么,反正我就是没有函数存在:
Traceback (most recent call last):
File
"/Users/penglong/Documents/python/s10/day3/test.py"
, line
10
,
in
<module>
json.dumps(data,
file
)
AttributeError: module
'json'
has no attribute
'dumps'
报错如上,json没有dumps模块存在。排查本地文件,大部分原因是本地文件有了json.py。python的包导入直接先导入了同级目录下的文件。如果本地文件并没有重复,那么就只能排查安装文件了,python命令行编辑模式下help(json.py) 如果文件存在,可以看到其详细信息和存放位置。但安装文件丢失的情况,我并未遇到。踩到的坑是本地文件重复,反而在安装文件排查了好久。
- python dict json读写文件
- python dict转json并保存文件
- Python读写json文件
- python读写json文件
- Python读写json文件
- Python读写json文件
- Python 读写json文件
- python 读写json文件
- python读写json文件
- Python Dict and File -- python字典与文件读写
- json dict python base64
- PYTHON将list或/dict对象写入txt/json文件
- 【Python】python读写txt和json文件
- python 读写txt文件 json文件
- python 中Dict 转 Json
- python dict与json转换
- python json 转 dict , list
- 用python读写yaml/json文件
- NOI 1.13 15:求序列中的众数
- Android Donut Makefile 分析之二 (build/envsetup.sh)
- 数据库索引到底是什么,是怎样工作的?
- Windows安装Oracle 11g后开机变慢的解决方法
- 第一课、 走进C
- python dict json读写文件
- [Java]String和StringBuffer连接字串的效率比较
- build/envsetup.sh 简介
- 文本文件 二进制文件
- 互联网分布式系统理论与技术要点
- HAUTOJ company
- nyist-ACM17新生国庆集训Round#1题解
- fedora卸载软件
- BZOJ4386: [POI2015]Wycieczki