Python处理json格式的数据文件(一些坑、一些疑惑)
这里主要说最近遇到的一个问题,不过目前只是换了一种思路先解决了,脑子里仍然有疑惑,只能怪自己太菜。
最近要把以前爬的数据用一下了,先简单的过滤一下,以前用scrapy存数据的时候为了省事也为了用一下它的item exporter,将数据持久化,用了jsonlinesitemexporter,并且导出到一个json文件(现在我有点后悔)。当我读文件,遍历每行,json.loads每行时,没错,惊喜出现了。
def cf_movie():
with open('movies.json', 'r') as fp:
for l in fp:
mj = json.loads(l)
wstr = mj['name']
f.write(wstr.encode('utf-8'))
print 'done'
ValueError: Expecting property name: line 1 column 137 (char 136)
当时就蒙了,难道我导出去json格式,再用json来loads就不行了?不能说我打开文件方式不对吧,而且遍历方式以前一直在用,错误出在loads那里。其实我是有点较真的,导出的文件有TXT格式的,我拿一个试了试,一点错没有。Google百度了一大堆,都是说字符串格式问题,不过这不是我的错,我导出的就是json格式,所以格式不会有错,而且我还专门确认了一下。我表示不服,不过没道理的呀,我试着一行一行读(试几行),可以loads没错。我甚至把遍历文件的三种方式都试了一遍,仍然报错。突然想到当初看scrapy文档时,有讲到json处理大文件不方便,难道是因为我文件是json的问题?我换了一个小的json文件,果然没问题。现在基本确定是json文件大小的问题,不过Python得json模块里没说这个问题。但数据还是要过滤的,我试了一下,我的json文件有大概2万行,设一个flag测读多少行,最高设到8000,9000就报错,然后8500页报错,所以8000是可以的。这样就有一个思路,将文件分解为多个不报错的小文件,然后再解析、过滤。不过我的测试文件才2M左右,我还有400多M的,这样岂不是很刚。想了想我决定先不用这种思路,想到了以前学Python基础的时候无意看到一个函数eval,将字符串转为字典,我的字符串符合字典格式(肯定的),所以我决定用这种方式,目前很流畅,不过前提是你的字符串格式要对。
不过我目前还是没懂为什么loads会报错,用TXT格式文件却不报错,经历了从有想法到放弃,心有疑惑。
Python处理json格式的数据文件(一些坑、一些疑惑)的更多相关文章
- 中文格式python 打印json格式的数据中文显示问题
废话就不多说了,开始... 平日会有这么一个应用场景,会用python去处置json格式的web API,以“ip.taobao.com”的API为例,详情见http://ip.taobao.com/ ...
- python 将json格式的数据写入csv格式的文件中
# coding=utf-8 import json import csv # 重新进行配置读写数据时的默认编码 import sys reload(sys) sys.setdefaultencodi ...
- python处理json格式的数据
这里我就不介绍json了,不知道json的同学可以去百度一下json,首先我们的json的格式如下,这个json有点长,这个json来自我以前的一个小任务,具体看这里:http://www.cnblo ...
- python将json格式的数据转换成文本格式的数据或sql文件
python如何将json格式的数据快速的转化成指定格式的数据呢?或者转换成sql文件? 下面的例子是将json格式的数据准换成以#_#分割的文本数据,也可用于生成sql文件. [root@bogon ...
- python json格式和csv文件转换
python json格式和csv文件转换 上代码 import csv import json ''' json格式示例 [{ "firstName":"Bill&qu ...
- python中json格式数据输出实现方式
python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...
- python 使用eval() 可以将json格式的数据,转换为原始数据
使用python 自带的函数可以将json 格式的数据(也就是字符串)转换为原始格式的数据, 当使用json.loads()无法将json格式的数据转换为原始数据(存在多层各种格式类型数据的嵌套), ...
- 如何使用python内置的request发送JSON格式的数据
使用步骤如下: 一.如果想发送json格式的数据,需要使用request模块中的Request类来创建对象,作为urlopen函数的参数 二.header中添加content-type为applica ...
- scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据
在安装完scrapy以后,相信大家都会跃跃欲试想定制一个自己的爬虫吧?我也不例外,下面详细记录一下定制一个scrapy工程都需要哪些步骤.如果你还没有安装好scrapy,又或者为scrapy的安装感到 ...
随机推荐
- .net 实现上传文件分割,断点续传上传文件
一 介绍 断点续传搜索大部分都是下载的断点续传,涉及到HTTP协议1.1的Range和Content-Range头. 来个简单的介绍 所谓断点续传,也就是要从文件已经下载的地方开始继续下载.在以前版本 ...
- nullcon HackIM 2016 -- Crypto Question 4
He is influential, he is powerful. He is your next contact you can get you out of this situation. Yo ...
- LVS简单实现NAT&DR模型
LVS:Linux Virtual Server 一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在LVS已经是Linux标准内核的一部分 ...
- Button四角有弧度及按下显示不同的颜色
一般的button都是矩形或者正方形,但为了显示不同的效果,让界面更美化,可以对其进行处理!!! 1.四角有弧度的button 2.按下button显示不同的颜色 实现步骤: 首先在drawable文 ...
- iOS 定位功能的实现
1.导入框架 Xcode中添加"CoreLocation.framework" 2.导入主头文件 #import <CoreLocation/CoreLocation.h&g ...
- jQuery Mobile 工具栏
jQuery Mobile 工具栏 工具栏元素常被放置于页眉和页脚中 - 以实现"已访问"的导航: 标题栏 页眉通常会包含页眉标题/LOGO 或一到两个按钮(通常是首页.选项或搜索 ...
- yarn container启动失败
在yarn资源管理的集群上运行spark程序,无法读取的数据多与少,都会报这个错误,但是其他程序在集群上能够正常运行. 16/11/14 00:13:44 WARN cluster.YarnSched ...
- Visual Studio 2015 下 编译 libpng
libpng https://github.com/glennrp/libpng zlib https://github.com/madler/zlib/releases https://github ...
- spring 多线程 注入 服务层 问题
在用多线程的时候,里面要用到Spring注入服务层,或者是逻辑层的时候,一般是注入不进去的.具体原因应该是线程启动时没有用到Spring实例不池.所以注入的变量值都为null. 详细:http://h ...
- ASP.NET中的Session怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...