python_dict json读写文件
命令汇总:
json.dumps(obj) 将python数据转化为json
Indent实现缩进,ensure_ascii 是否用ascii解析
json.loads(s) 将json数据转换为python的数据
json.dump(obj, fp) 转换为json并保存到文件中
json.load(fp) 从文件中读取json,并转化为python数据
先贴个完整代码:
data = {
"name": "uhao",
"age": 18,
"feature" : ['高', '富', '帅']
} import json #导入模块
with open('test.json','w') as file: #test.json文本,只能写入状态 如果没有就创建
json.dump(data, file) #data转换为json数据格式并写入文件
file.close() #关闭文件 with open('test.json','r') as fileR: #打开文本读取状态
R = json.load(fileR) #解析读到的文本内容 转为python数据 以一个变量接收
fileR.close() #关闭文件 fea = R['feature'] #打印变量
print(fea[2])
运行结果:
详细步骤都写了,注释。
看起来简洁方便,似乎毫无难点,那么来愉快的谈一下使用中常见的坑
不管你要读什么,反正我一点数据也没有:
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) 如果文件存在,可以看到其详细信息和存放位置。但安装文件丢失的情况,我并未遇到。踩到的坑是本地文件重复,反而在安装文件排查了好久。
作者:含笑半步颠√
博客链接:https://www.cnblogs.com/lixy-88428977
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。
python_dict json读写文件的更多相关文章
- 使用json读写文件中的数据
把json的数据写入到文件中 import json with open('data.json','w+') as f: json.dump({"name":"张彪&qu ...
- ios本地文件内容读取,.json .plist 文件读写
ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...
- Python读写文件乱码问题
对开发者来说,最恼人的问题之一莫过于读写文件的时候,由于编码千差万别,出现乱码问题.好难快速解决啊... 最近我也遇到了这样的问题,经研究,把大致的解决思路拿出来共享. 1. python中习惯首先声 ...
- node.js的fs核心模块读写文件操作 -----由浅入深
node.js 里fs模块 常用的功能 实现文件的读写 目录的操作 - 同步和异步共存 ,有异步不用同步 - fs.readFile 都不能读取比运行内存大的文件,如果文件偏大也不会使用readFil ...
- 处理Python2.7读写文件中的中文乱码问题
1.设置默认编码 在Python代码中的任何地方出现中文,编译时都会报错,这时可以在代码的首行添加相应说明,明确utf-8编码格式,可以解决一般情况下的中文报错.当然,编程中遇到具体问题还需具体分析啦 ...
- UE4 的json读写方式
转自:http://blog.csdn.net/cartzhang/article/details/41009343 JSON 的解析有很多开源库.UE4的JSON使用在代码的Public->S ...
- node读写文件
结束了一天的工作和学习,今天对于自己最大的收获就是node读写文件和对callback函数有了更深一步的理解.总结一下node读写的文件的注意事项吧(注意:下面讲的是增加数据的方法): 1.我们可以封 ...
- UE4的JSON读写方式<一>
声明:全部权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...
- UE4的JSON读写方式<一>
声明:所有权利保留. 转载必须说明出处:http://blog.csdn.net/cartzhang/article/details/41009343 UE4的Json的解析博客地址: http:// ...
随机推荐
- UmiJS可插拔的企业级 react 应用框架,配合ant-design-pro使用
入门非常简单 # 安装 $ yarn global add umi # 或者 npm install -g umi # 新建应用 $ mkdir myapp && cd myapp # ...
- [Beta阶段]发布说明
小小易校园微信小程序发布说明 第二版小小易校园小程序发布啦~ 打开微信,点击右上角➕,选择扫一扫,扫描以下二维码即可进入小程序: 版本功能: 上一版功能请参见[Alpha阶段]发布说明. 当前版本的更 ...
- 列出python库的内置方法
import cv dir(cv) ['16SC', '16UC', '32FC', '32SC', '64FC', '8SC', '8UC', 'Abs', 'AbsDiff', 'AbsDiffS ...
- 【Swoole】php7.1安装swoole扩展
参照:https://zixuephp.net/article-430.html 1.源码编译安装,PHP版本7.1.33 2.在已经编译好安装的php7.1中安装swoole扩展. 一.下载swoo ...
- docker入门-基本概念(一)
Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发 ...
- Qt组件(例如按钮、树形控件)上响应鼠标右键
ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->textEdit,SIGNAL(cust ...
- MySQL 使用 ON UPDATE CURRENT_TIMESTAMP 自动更新 timestamp (转)
原文地址: https://blog.csdn.net/heatdeath/article/details/79833492 `create_time` timestamp not null defa ...
- Linux下查看占用CPU资源最多的几个进程
linux下获取占用CPU资源最多的10个进程: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用内存资源最多的10个进 ...
- HTML5 VUE单页应用 SEO 优化之 预渲染(prerender-spa-plugin)
前言:当前 SPA 架构流行的趋势如日中天,前后端分离的业务模式已经成为互联网开发的主流方式,但是 单页面 应用始终存在一个痛点,那就是 SEO, 对于那些需要推广,希望能在百度搜索时排名靠前的网站而 ...
- LODOP常见问题连接(含常见小问答博文)
问答大全 纸张打印机 注册 table表格 clodop测试地址 字体 超文本 行间距.字间距 clodop回调函数 条码 页眉页脚 SET……STYLEA 水平居中 简短排查 提示报错 慢进度条 套 ...