python按行写入json文件,每一行都是一个标准json对象,但是整体文件却非json对象

news2024/11/17 23:40:23

今天这篇文章主要是一个小小的偏向于应用的实践,为啥会写这个,还要回溯到2017年,那时候做项目的时候有一个是要做数据处理分析的工作,给到我的数据集我拿到的时候总觉得怪怪的,每一行都是一个字典对象,但是整体文件内容却不是一个json对象,导致我直接使用json模块load读取的时候会报错,如下:
 

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 2642)

很显然,文件符合标注的json格式。

我当时采用的是间接的处理方法,就是按照字符串的形式去读取出啦,然后再做转化,成为dict对象,正是因为这样的技术路线让我接触到了python里面很神奇的一个函数eval(),大白话来简单讲这个函数的作用就是:将字符串内容转化为原始内容的对象,我也是觉得新奇,写了一篇博客记录了一下,目前已经有7w+的阅读量了,感兴趣的话可以看下:

《python神奇函数之eval()学习》

今天这里主要并不是为了回顾之前做的事情,而是今天要做的事情跟之前的事情存在着关联,之前是为例加载解析读取,今天主要是按行写入json对象数据才行。

我这里最开始采用的方法就是写将原始数据转化为string对象,然后写成文件,但是这样的文件是有问题的,在加载数据集进行解析的时候发现是找不到对应json对象里面的key的,所以这种方式排除。

接下来我就想基于a模式,来操作json文件,这种方式最终也是证明有效的方式了,简单看下对应的代码实现:

string={
        "content": "我国现存有哪些环境污染问题?", 
        "summary": "1、大气污染,我国大气中主要污染物是氨氮,二氧化硫,氮氧化物这三类物质。2、水体污染,目前我国水资源污染还是比较严重的,主要有以下几种:工业生产废水直接排入水体,导致水体污染;农业污染,农业生产中使用大量的农药,如有机磷农药,有机氯农药等;农作物上的农药残留在降水的作用下,渗入地下水体中;生活用水污染,在使用这些水资源的过程中会产生很多生活污水,也称中水,比如洗涤用水,医疗废水等。3、土壤污染(1)、化学污染物:包括无机污染物和有机污染物。如汞、镉、铅、砷等重金属,过量的氮、磷植物营养元素以及氧化物和硫化物,各种化学农药、石油及其裂解产物,以及其他各类有机合成产物等。(2)、物理污染物:来自工厂、矿山的固体废弃物如尾矿、废石、粉煤灰和工业垃圾等。(3)、生物污染物:带有各种病菌的城市垃圾和由卫生设施(包括医院)排出的废水、废物以及厩肥等。(4)、放射性污染物:主要存在于核原料开采和大气层核爆炸地区,以锶和铯等在土壤中生存期长的放射性元素为主。"
        }



saveDir="environment/"
if not os.path.exists(saveDir):
    os.makedirs(saveDir)




with open(saveDir+"data.json","a",encoding="utf-8") as f:
    for i in range(100):
        f.write(json.dumps(string)+"\n")





string={
        "content": "你好,系统学习python哪个公众号最靠谱?", 
        "summary": "PythonAI之路"
        }



saveDir="environment/"
if not os.path.exists(saveDir):
    os.makedirs(saveDir)




with open(saveDir+"data.json","a",encoding="utf-8") as f:
    for i in range(100):
        f.write(json.dumps(string)+"\n")

除此之外,还有另一种更加好用的方式,就是借助于jsonlines模块来直接实现按行写入即可,这是标准的模块,使用起来也是很方便的,文档在这里,如下所示:

 官方仓库在这里,如下所示:

 就不再过多介绍了,使用方法是很简单的了。

核心代码实现如下所示:

string={
        "content": "当前的知识星球有很多,有没有什么以交流学习成长进步为主题的可以推荐给我?", 
        "summary": "有的,主打的就是系统学习实践,共建共享共进步:AZX_cx"
        }
with jsonlines.open(saveDir+'data2.json', mode='w') as writer:
    for i in range(100):
        writer.write(string)

结果数据如下所示:

 还是很方便的了。

到这里是不是理解我文章开头为什么先要回顾一下17年做项目的事情了,是的,这里要基于jsonlines模块实现这些数据的按行读取处理了。

核心代码实现依旧非常简洁,如下:

count=0
with jsonlines.open(saveDir+'data2.json') as reader:
    for obj in reader:
        count+=1
        if count<10:
            print(obj)
            print(type(obj))

我打印了前10行数据以及每行数据对应的类型type,结果如下所示:

 完美解决了。

这里我想再复现一下17年的做法,代码实现如下所示:

with open(saveDir+'data2.json',encoding="utf-8") as f:
    data_list=f.readlines()
for one_line in data_list[:10]:
    print(one_line)
    print(type(one_line))

这里我同样打印前10行的内容,以及每行内容对应的类型type,如下所示:

 可以看到:用这种方式读取出来的数据每行都是字符串类型的,不是我们想要的,这里就需要用到eval函数了,看下代码实现:

with open(saveDir+'data2.json',encoding="utf-8") as f:
    data_list=f.readlines()
for one_line in data_list[:10]:
    print(one_line.strip())
    print(type(one_line))
    print(type(eval(one_line)))

为了直观对比,这里我没有删除原来的类型输出,而是在最后一行加了一个类型输出,结果如下所示:

 直观对比,你就马上明白eval函数的作用了,我就不再赘述了。

今天在最开始我就讲了是一个很小的实践,小的实践背后往往有更有意思的发现,这也是我将近10年开发历程的最大心路体验,喜欢交流分享共创共建的可以一起加油,一起加入学习进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊部署在K8S的项目如何获取客户端真实IP

前言 最近部门有个需求&#xff0c;需要对一些客户端IP做白名单&#xff0c;在白名单范围内&#xff0c;才能做一些业务操作。按我们的部门的一贯做法&#xff0c;我们会封装一个client包&#xff0c;提供给业务方使用。&#xff08;注&#xff1a; 我们的项目是运行在K8S上&a…

LAMP的实战应用之部署wordpress论坛,并实现正常访问登录论坛

目录 环境配置&#xff1a; 一、安装配置基础环境 步骤一&#xff1a;配置本地yun 步骤二&#xff1a;安装Remi 仓库配置包&#xff08;清华源获取&#xff09; 步骤三&#xff1a;配置Remi 仓库配置包 步骤四&#xff1a;安装php的加速器配置 步骤五&#xff1a;启动服…

Cesium实战 - 实现大气云层效果

Cesium实战 - 实现大气云层效果 Cesium 实现大气云层效果主要思路核心代码在线示例 Cesium 实现大气云层效果 在实际开发中&#xff0c;一般会有天气的效果&#xff0c;雨雪雾比较常见&#xff0c;相关的博客也很多&#xff0c;但是关于云层的天气效果还是比较少&#xff0c;而…

【调峰】储能辅助电力系统调峰的容量需求研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

经典神经网络(6)ResNet及其在Fashion-MNIST数据集上的应用

经典神经网络(6)ResNet及其在Fashion-MNIST数据集上的应用 1 ResNet的简述 ResNet 提出了一种残差学习框架来解决网络退化问题&#xff0c;从而训练更深的网络。这种框架可以结合已有的各种网络结构&#xff0c;充分发挥二者的优势。 ResNet以三种方式挑战了传统的神经网络架…

【LeetCode】342. 4的幂

342. 4的幂&#xff08;简单&#xff09; 方法一&#xff1a;二进制 思路 首先考虑一个数字是不是 2 的整数次方&#xff1a;如果一个数字 n 是 2 的整数次方&#xff0c;那么它的二进制一定是 0...010...0 这样的形式&#xff0c;将它和 -n 按位与的结果一定是它本身。如果 …

前沿质谱应用沙龙分享会暨苏州百趣落成仪式即将开幕!

质谱作为一项医学检验新技术&#xff0c;凭借高特异性、高灵敏度、多指标检测等优势&#xff0c;成为了体外诊断领域最富生命力的新技术之一。目前质谱技术能够准确的测定多种生物小分子代谢物&#xff0c;且质谱在大分子物质例如蛋白质方面也应用的非常广泛。目前&#xff0c;…

要电脑重装系统装在哪个盘最好

在进行电脑重装系统时&#xff0c;选择一个合适的系统安装盘是非常重要的。本文将为您介绍如何选择最佳的系统安装盘&#xff0c;以确保系统性能和稳定性的最佳表现。 工具/原料&#xff1a; 系统版本&#xff1a;windows系统 品牌型号&#xff1a;华硕VivoBook14 软件版本…

张小龙发明了小程序,是否意味着失败?

今天微信小程序上线&#xff0c;从开发到上线仅仅用了四天时间&#xff0c;这是一个了不起的成就。 小程序诞生以来&#xff0c;一直存在着一种声音&#xff1a;它是张小龙“伟大的发明”&#xff0c;是微信“伟大的创新”。然而&#xff0c;张小龙在小程序发布会上宣布&#…

Spark SQL概述、数据帧与数据集

文章目录 一、准备工作1、准备数据文件2、启动Spark Shell 二、加载数据为Dataset1、读文件得数据集 三、给数据集添加元数据信息1、定义学生样例类2、导入隐式转换3、将数据集转换成学生数据集4、对学生数据集进行操作&#xff08;1&#xff09;显示数据集内容&#xff08;2&a…

认识熟悉 Stable Diffusion(SD)基本参数

界面样式 界面参数 界面参数说明prompt希望生成的图片的描述negative prompt不希望在图片中出现的描述Batch size每次生成的图片个数Width图片宽度Height图片高度 这里需要注意的就是尺寸&#xff0c;尺寸并非越大越好&#xff0c;需要根据自己的配置和需求适当调整&#xff…

node.js+vue学生读书笔记共享分享系统

从上面的描述中可以基本可以实现软件的功能: 1、开发实现读书笔记共享平台的整个系统程序; 2、管理员;首页、个人中心、用户管理、笔记分享管理、个人笔记管理、管理员管理、交流互动、系统管理等。 3、用户:首页、个人中心、笔记分享管理、个人笔记管理、我的收藏管理。 4、前…

Window10配置Maven详细教程

文章目录 一、Maven概述二、Maven下载三、配置Maven环境变量四、查看Maven是否配置成功五、为Maven配置本地仓库以及指定远程仓库5.1 Maven构件搜索顺序5.2 Maven配置本地仓库5.3 Maven指定远程仓库 一、Maven概述 Maven是专门管理和构建Java项目的工具&#xff0c;Maven的主要…

Linux nohup-后台挂起运行程序神器

一. 场景描述 天黑了&#xff0c;我得离开实验室去吃饭了。为了环保&#xff0c;我必须关闭电脑&#xff0c;减少不必要的浪费&#xff01;正常情况下当我关闭终端或电脑时&#xff0c;上面运行的任务代码即会自动停止&#xff0c;但我依旧希望保持代码的正常运行&#xff0c;此…

Android 更新后跑不起来?快来适配 AGP8 和 Flamingo/JDK 17

随着 Android Studio Flamingo 正式版的发布&#xff0c;AGP 8&#xff08;Android Gradle Plugin 8&#xff09;也正式进入大家的视野&#xff0c;这次 AGP 8 相关更新属于「断代式」更新&#xff0c;同时如果想体验 AGP 8&#xff0c;就需要升级到 Android Studio Flamingo 版…

揭秘速卖通卖家成功的绝佳秘籍,助您打造畅销店铺!

在竞争激烈的速卖通市场中&#xff0c;如何让您的店铺脱颖而出并实现畅销&#xff1f;林哥今天就跟大家讲一讲一些成功速卖通卖家的绝佳秘籍&#xff0c;帮助您引导高流量和高转化率&#xff0c;成就一个畅销的店铺。 ​一、精确定位目标受众 成功的速卖通店铺离不开精确的目标…

自动生成作文的软件有哪些?盘点五种自动生成作文软件

写作是一项需要花费大量时间和精力的任务&#xff0c;而自动生成作文的软件可以帮助我们节省大量的时间。这些软件通过分析和归纳大量的素材和语言模型&#xff0c;能够快速生成高质量的文章。相比于传统的写作方式&#xff0c;使用自动生成作文软件可以更快地完成文章&#xf…

一套完整的客户管理系统应该包含哪些模块呢?

一套完整的客户管理系统应该包含哪些模块呢&#xff1f; 想要弄清楚一个完整的客户管理系统应该具备哪些功能&#xff0c;首先得清楚系统使用者、使用场景以及主要功能这三个因素。 以我们公司为例&#xff1a; 主要使用者&#xff1a;运营人员、市场人员、产品人员。主要目…

Android Settings中Preference的理解以及使用

Preference 是Android App 中重要的控件之一&#xff0c;Settings 模块大部分都是通过 Preference 实现 优点&#xff1a; Preference 可以自动显示我们上次设置的数据&#xff0c;Android提供preference这个键值对的方式来处理这种情况&#xff0c;自动保存这些数据&#xff…

链接生成二维码怎么弄?这些制作方法分享给大家

在现代社会中&#xff0c;链接生成二维码已经成为了一个非常实用的工具。通过将链接转换为二维码&#xff0c;我们可以将它们轻松地分享给朋友、家人或同事&#xff0c;而无需手动输入URL或复制粘贴。这使得信息的传播变得更加快捷和高效。例如&#xff0c;你正在计划一个聚会&…