当前位置: 首页 > news >正文

〖Python网络爬虫实战㉑〗- 数据存储之JSON操作

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+ 

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)

        即将转为付费专栏,更多详细请看,五一或有优惠活动哦。

关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明

  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战⑳〗- 数据存储之CSV操作实战

🌟上节回顾

我们在上一节博客中,和大家介绍了TXT保存,CSV文件保存,我们还和大家介绍了一篇CSV实战的博客。我们已经学习了好几种数据的存储方式。本篇博客,我们就来了解如何利用 Python 保存数据到 JSON 文件。

⭐️ JSON存储

我们首先,先来认识一下什么是JSON,JSON的全称为 JavaScript Object Notation, 也就是 JavaScript 对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。是一种非常常见的数据格式。

🌟对象和数组

在 JavaScript 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型,下面简要介绍一下它们。

✨对象

对象(Object):对象是 JavaScript 中最基本的数据类型,它是由一组属性和方法组成的封装体,通常被用于存储数据、服务等信息。一个对象通常是通过对象字面量或构造函数创建的。

{  "name": "John",  "age": 30,  "email": "john@edu.com",  "phone": "123-456-7890"  
}

在这个 JSON 对象中,每个键(key)都对应一个值(value),这些值被组织成一个数组,每个键值对表示 JSON 中的一行内容。对象内的这些数据之间是用逗号分隔的,这个分隔符也是 JSON 的一个特性。

✨数组

数组(Array):数组是一组相同类型的元素的集合,通常用于存储一系列数据。数组在 JavaScript 中非常常用,尤其是在需要动态存储一些大量数据的情况下,使用数组可以很方便地管理这些数据。数组在内存中占用较少的空间,也便于随机访问。

[  {  "name": "Alice",  "age": 30,  "email": "alice@edu.com"  },  {  "name": "Bob",  "age": 25,  "email": "bob@edu.com"  },  {  "name": "Charlie",  "age": 35,  "email": "charlie@edu.com"  }  
]

在 JavaScript 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。

✨区别 

对象和数组的区别在于,对象是一个更加封装的数据结构,它包含了属性和方法,这些属性和方法可以被访问和修改。而数组则是一个更加灵活的数据结构,它可以存储不同类型的元素,而且可以通过索引访问元素。另外,数组是一个固定长度的数据结构,不能动态扩展大小,而对象则可以通过new操作符来创建新对象,同时还可以重写对象的方法。

总之,对象和数组都是 JavaScript 中非常重要的数据类型,可以根据具体情况来选择使用。在进行文本编辑、交互式数据处理等任务时,使用对象更加方便和灵活;而在需要存储大量数据或处理大规模数据时,使用数组更加方便和快速。

🌟读取 和输出JSON

Python 为我们提供了简单易用的 JSON 库来实现 JSON 文件的读写操作,我们可以调用 JSON 库的 loads 方法将 JSON 文本字符串转为 JSON 对象,实际上 JSON 对象为 Python 中的 list 和 dict 的嵌套和组合,这里称之为 JSON 对象。另外我们还可以通过 dumps 方法将 JSON 对象转为文本字符串。

✨loads方法

例如,这里我们用上面的JSON 形式的字符串作为演示,它是 str 类型,我们用 Python 将其转换为可操作的数据结构,如列表或字典:


import json
str =""" [{"name": "Alice","age": "30","email": "alice@edu.com"},{"name": "Bob","age": "25","email": "bob@edu.com"},{"name": "Charlie","age": "35","email": "charlie@edu.com"}
]
"""print(type(str))
data = json.loads(str)
print(data)
print(type(data))

我们来运行一下,看看效果。

<class 'str'>
[{'name': 'Alice', 'age': '30', 'email': 'alice@edu.com'}, {'name': 'Bob', 'age': '25', 'email': 'bob@edu.com'}, {'name': 'Charlie', 'age': '35', 'email': 'charlie@edu.com'}]
<class 'list'>

我们在这里需要注意,JSON 字符串的表示需要用双引号,否则,这里会出现 JSON 解析错误的提示。因为数据用单引号来包围,就会出现loads 方法会解析失败。

如果从 JSON 文本中读取内容,例如这里有一个 data.json 文本文件,其内容是刚才定义的 JSON 字符串,我们可以先将文本文件内容读出,然后再利用 loads 方法转化:

import jsonwith open('data.json', encoding='utf-8') as file:str = file.read()data = json.loads(str)print(data)

这样就把我们要的数据读取了。

dumps方法

另外,我们还可以调用 dumps 方法将 JSON 对象转化为字符串。例如,将上例中的列表重新写入文本。

import json# 定义一个 JSON 对象
data = {'name': 'Alice','age': '30','email': 'alice@example.com'
}# 将 JSON 对象转化为字符串
json_string = json.dumps(data)# 打印字符串
print(json_string)

我们来打印看看上面效果

{"name": "Alice", "age": "30", "email": "alice@example.com"}

如果,我们想写入到json文件,那么,我们如何写代码呢。

with open('data.json', 'w', encoding='utf-8') as file:file.write(json.dumps(data, indent=2, ensure_ascii=False))

这段代码将打开名为 data.json 的文件,并将 data 对象写入文件中。json.dumps() 方法用于将 data 对象转换为 JSON 字符串,并将其写入文件中。indent 参数用于指定缩进级别,ensure_ascii 参数用于指定是否确保字符串中的非 ASCII 字符正确显示。

在这个例子中,我们使用 json.dumps() 方法将 data 对象转换为带缩进的字符串,并将其写入文件中。在写入时,我们指定了 indent=2 参数,这意味着每个缩进级别将使用两个空格进行缩进。此外,我们还指定了 ensure_ascii=False 参数,这意味着输出的字符串将不会出现 BOM(字节顺序标记)。

类比 loads 与 load 方法,dumps 也有对应的 dump 方法,它可以直接将 JSON 对象全部写入到文件中,因此上述的写法也可以写为如下形式:

json.dump(data, open('data.json', 'w', encoding='utf-8'), indent=2, ensure_ascii=False)

这里第一个参数就是 JSON 对象,第二个参数可以传入文件操作对象,其他的 indent、ensure_ascii 对象还是保持不变,运行效果是一样的。 

🌟总结

loadloadsdumpdumps,它们之间的主要区别包括以下几点:

 1、json.loads将一个Python数据结构(字符串)转换为JSON格式数据

 2. json.dumps将一个JSON编码的字符串转换回一个Python数据结构,即字符串

 3. json.dump() 和 json.load() 来编码和解码JSON数据,用于处理文件

我们可以这样记忆:

按照如下记忆:
文件:dump、load
字符串:dumps、loads

编码:dump、dumps
解码:load、loads

相关文章:

〖Python网络爬虫实战㉑〗- 数据存储之JSON操作

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…...

不得不说的行为型模式-责任链模式

目录 责任链模式&#xff1a; 底层原理&#xff1a; 代码案例&#xff1a; 下面是面试中可能遇到的问题&#xff1a; 责任链模式&#xff1a; 责任链模式是一种行为型设计模式&#xff0c;它允许多个对象在一个请求序列中依次处理该请求&#xff0c;直到其中一个对象能够…...

基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)

整个调试验证与仿真分析分三个步骤&#xff1a;第一步是进行 PCB 检查及电气特性测试&#xff0c;主 要用来验证硬件设计是否正常工作&#xff1b;第二步进行各子模块功能测试&#xff0c;包括高速光纤串行 通信的稳定性与可靠性测试&#xff0c; A/D 及 D/A 转换特性测…...

快速搭建Electron+Vite3+Vue3+TypeScript5脚手架 (无需梯子,快速安装Electron)

一、介绍 &#x1f606; &#x1f601; &#x1f609; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需…...

语义分割学习笔记(二)转置卷积

目录 1.转置卷积Transposed Convolution概念 2.转置卷积操作步骤 3.转置卷积参数 4.实战案例 推荐课程&#xff1a;转置卷积&#xff08;transposed convolution&#xff09;_哔哩哔哩_bilibili 感谢霹雳吧啦Wz&#xff0c;真乃神人也。 1.转置卷积Transposed Convolutio…...

docker运行PostgreSQL数据库维护,执行脚本备份数据库与更新表结构

文章目录 PostgreSQL简介业务场景数据库维护docker-compose配置备份脚本更新表结构脚本 PostgreSQL简介 PostgreSQL是一种开源的关系型数据库管理系统&#xff0c;它是一个功能强大、高度可定制化和支持复杂应用的数据库。它支持广泛的数据类型&#xff0c;包括数值、文字、二…...

【计算机网络】127.0.0.1、0.0.0.0、localhost地址是什么?

目录 0.0.0.0是什么&#xff1f;127.0.0.1是什么&#xff1f;用途 localhost是什么&#xff1f;总结 0.0.0.0是什么&#xff1f; IPV4中&#xff0c;0.0.0.0地址被用于表示一个无效的&#xff0c;未知的或者不可用的目标。 在服务器中&#xff0c;0.0.0.0指的是本机上的所有I…...

分享2款CSS3母亲节主题寄语文字动画特效

目录 ❤️ 前言 第一款&#xff1a;妈妈您辛苦了&#xff01; 一、效果图 二、代码实现 第二款&#xff1a;Mothers Day&#xff01; 一、效果图 二、代码实现 ❤️ 祝福 ❤️ 前言 母亲节&#xff0c;在每年五月的第二个星期日&#xff0c;是用来感谢母亲的节日。…...

【AutoGPT】AutoGPT出现,是否意味着ChatGPT已被淘汰

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 什么是ChatGPT&#xff1f; 什么是AutoGPT&#xff1f; AutoGPT与ChatGPT的区别 AutoGPT的优势和劣势 优势 劣势 ChatGPT是否会被淘汰&#xff1f; 前言 近年来&#x…...

( 字符串) 9. 回文数 ——【Leetcode每日一题】

❓9. 回文数 难度&#xff1a;简单 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如…...

SpringAOP

SpringAOP 一、AOP1. AOP简介1.1 AOP简介和作用1.2 AOP中的核心概念 2. AOP入门案例【重点】2.1 AOP入门案例思路分析2.2 AOP入门案例实现【第一步】导入aop相关坐标【第二步】定义dao接口与实现类【第三步】定义通知类&#xff0c;制作通知方法【第四步】定义切入点表达式、配…...

学系统集成项目管理工程师(中项)系列15_质量管理

1. 质量&#xff08;Quality&#xff09;的定义 1.1. 反应实体满足主体明确和隐含需求的能力的特性总和 1.2. 明确需求是指在标准、规范、图样、技术要求、合同和其他文件中用户明确提出的要求与需要 1.3. 隐含需求是指用户和社会通过市场调研对实体的期望以及公认的、不必明…...

统计学习方法第四章——朴素贝叶斯法

x.1 前言 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。是通过给定training dataset学习联合概率分布的方法&#xff0c;是一种生成方法。 x.2 使用贝叶斯定理做分类 使用贝叶斯定理做分类&#xff0c;相比较于朴素贝叶斯即丢除特征条件独立假设这个条件。 …...

安装配置goaccess实现可视化并实时监控nginx的访问日志

一、业务需求 我们安装了nginx后,需要对nginx的访问情况进行监控(希望能够实时查看到访问nginx的情况),如下图所示: 二、goaccess的安装配置步骤 2.1、准备内容 需要先安装配置nginx或OpenResty - 安装 Linux环境对Nginx开源版源码下载、编译、安装、开机自启https://b…...

springboot第14集:MyBatis-CRUD讲解

注意点&#xff1a;增、删、改操作需要提交事务&#xff01; 为了规范操作&#xff0c;在SQL的配置文件中&#xff0c;我们尽量将Parameter参数和resultType都写上&#xff01; 编写Mapper接口类 import com.da.pojo.User; import java.util.List; public interface UserMapper…...

ES6新特性(1)

目录 一、字符串扩展 &#xff08;1&#xff09;字符串遍历器接口&#xff08;for...of...&#xff09; &#xff08;2&#xff09;模板字符串 二、字符串新增方法 &#xff08;1&#xff09;包含方法 &#xff08;2&#xff09;重复方法 &#xff08;3&#xff09;补全方…...

这就是二分查找?(C语言版)

大家好&#xff01;我又来了&#xff0c;哈哈~今天我要和大家分享一种神奇的算法——二分查找&#xff01;你可能会问&#xff0c;“二分查找有什么好玩的&#xff1f;”但在我看来它就像一场魔法表演&#xff0c;当你输入一个数&#xff0c;他会在一堆数中快速找到它的位置。找…...

操作系统之内存管理

连续分配 一、单一连续 直接为要运行的进程分配一个内存&#xff0c;只适合单任务&#xff0c;只能用于单对象、单任务&#xff0c;内存被分配为系统区和用户区&#xff0c;系统区在低地址&#xff0c;用户区是一个用户独享 二、等分分区 由于分配一个内存只能执行单任务&a…...

【Python | matplotlib】matplotlib.cm的理解以及举例说明

文章目录 一、模块介绍二、颜色举例 一、模块介绍 matplotlib.cm是Matplotlib中的一个模块&#xff0c;它提供了一组用于处理颜色映射&#xff08;colormap&#xff09;的函数和类。颜色映射是一种将数值映射到颜色的方法&#xff0c;常用于制作热力图、等值线图、散点图等。 …...

数据库单实例升级

一、单实例环境,全时长二个半钟多。详细图文说明到这下载 1、停止所有oracle相关进程。 Emctlstop dbconsole Isqlplusctl stop Lsnrctl stop sqlplus /nolog sql>conn /as sysdba Connectedtoanidleinstance. sql>shutdown 然后&#xff0c;冷备份下数据库cp…...

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…...

ThreadLocal的使用介绍和底层原理解析和开源框架的使用实例

文章目录 ThreadLocal的使用介绍和底层原理解析和开源框架的使用实例ThreadLocal简介ThreadLocal使用示例ThreadLocal原理解析Spring中ThreadLocal的应用小结ThreadLocal的使用步骤常见面试题案例解析(框架源码经典案例)案例实战 ThreadLocal的使用介绍和底层原理解析和开源框架…...

带你学c带你飞-P7取值范围

比特位 CPU能读懂的最小单元——比特位&#xff0c;bit&#xff0c;b 字节 内存机构的最小寻址单元——字节&#xff0c;Byte&#xff0c;B 1Byte8bit 进制 怎么算 注意&#xff1a;int默认是signed类型&#xff0c;signed类型第一位是符号位 符号位 存放signed类型的存…...

ramfs, rootfsinitramfs

什么是ramfs? ramfs是一个非常简单的文件系统&#xff0c;它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为一个动态可调整大小的基于ram的文件系统。 Linux通常将所有文件缓存在内存中。从后备存储(通常是挂载文件系统的块设备)读取的数据页被保留下来&#xff0c;以防…...

十三届蓝桥杯研究生组国赛-最大公约数(线段树+二分)

十三届蓝桥杯研究生组国赛-最大公约数 1、问题描述2、解题思路2.1 解法一:暴力查询区间gcd(75%)2.2 解法二:线段树+二分法(AC)1、问题描述 问题描述 给定一个数组, 每次操作可以选择数组中任意两个相邻的元素 x , y x,y x,y...

数据结构——二叉树层序遍历

数据结构——二叉树层序遍历 107. 二叉树的层序遍历 II199. 二叉树的右视图思路&#xff1a; 637. 二叉树的层平均值 107. 二叉树的层序遍历 II 107. 二叉树的层序遍历 II 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节…...

【微机原理】8088/8086微处理器

目录 一、8088/8086的功能结构 1.总线接口部件&#xff08;BIU&#xff09; 2.执行部件&#xff08;EU&#xff09; 二、8088/8086的寄存器结构&#xff08;14个&#xff09; 溢出标志的概念 溢出和进位的区别 8086CPU是Intel系列的16位微处理器&#xff0c;他有16根数据…...

springboot第12集:DAO功能代码

在Spring Boot中&#xff0c;DAO是数据访问对象的缩写&#xff0c;它是一种设计模式用于提供对数据库操作的抽象层。通过使用DAO模式&#xff0c;我们可以将数据操作与业务逻辑分离&#xff0c;并提供一个单独的接口来执行所有的数据库操作。 在Spring Boot中&#xff0c;通常使…...

基于KZG多项式承诺方案的RLN

1. 引言 RLN——Rate-Limiting Nullifier为PSE团队主导的项目&#xff0c;源自&#xff1a; Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting RLN&#xff08;Rate-Limiting Nullifier&#xff09;是一种…...

《站在巨人的肩膀上学习Java》

Java从诞生距今已经有28年了&#xff0c;在这段时间里&#xff0c;随着Java版本的不断迭代&#xff0c;Java新特性的不断出现&#xff0c;使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一&#xff0c;Java一直排行在编程语言热门程度的前3名。 可想而…...

交互式网站开发技术包括/app数据分析软件

Intel Driver and Support Assistant 以下简称 Intel DSA。 Intel DSA 依赖 Microsoft Visual C 2015-2019 Redistributable (x86)&#xff0c;以下简称 vc_redist.x86。 我电脑上安装的 cv_redist.x86 版本是 14.23.27820&#xff0c;但 Intel DSA 的安装器&#xff08;Intel-…...

简洁大气的企业网站/seo优化与品牌官网定制

2019独角兽企业重金招聘Python工程师标准>>> 今天看element-react源码的时候&#xff0c;又看到了这张似曾相识却又异常陌生的老面孔&#xff0c;那就是Function.prototype.apply()... import React from react; import PropTypes from prop-types; import classnam…...

建站是什么东西/查权重工具

$to 变量里面是放是发送到的号码 $title 变量里面放的是发送邮件的主题 $content 变量里面放的是发送邮件的内容...

wordpress彩色标签/百度优化师

方法一&#xff1a;.tar.gz包安装方法&#xff1a; 第一步:从腾讯官方下载QQ的安装文件&#xff0c;并假设下载后是这个位置/path/linuxqq_preview1.0_2_i386.tar.gz 第二步&#xff1a;将QQ安装文件复制到用户目录中(假设用户目录是&#xff1a;/home/drmeng) # cp path/linux…...

二级建造师考试试题/整站优化的公司

refs: http://blog.chinaunix.net/uid-26404201-id-3334234.html 先看下面的Makefile&#xff1a; #exampleB : $(A)A laterall: echo $(B) 执行make命令&#xff0c;我们发现什么都没输出,我们将第3行的:换成。#exampleB $(A)A laterall: echo $(B) 执行make&#x…...

网站如何建立快捷方式/海淀区seo搜索引擎优化企业

本文翻译自&#xff1a;Android 8: Cleartext HTTP traffic not permittedI had reports from users with Android 8 that my app (that uses back-end feed) does not show content. 我收到来自Android 8用户的报告&#xff0c;称我的应用程序&#xff08;使用后端供稿&#x…...