专业做网站建设的公司/软文写手
一、JSON文件存储
JSON,全称为 JavaScript 0bject Notation,也就是JavaSript 对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。本节中,我们就来了解如何利用 Python 保存数据到SON 文件中。
(一)对象和数组
在avaScript 语言中,一切都是对象。因此,任何支持的类型都可以通过SON 来表示,例如如字串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型,下面简要介绍一下它们。
对象:
它在JavaScript 中是使用花括号 包裹起来的内容,数据结构为{key1: value1,key2: value2,.}的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值,键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:
数组在JavaScript 中是方括号包裹起来的内容,数据结构为["Java""JavaScript",“vb”...] 的索引结构在Javascript 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。
所以,一个JSON 对象可以写为如下形式:
[{"name": "张三","age": "24","birthday": "1999-07-12"},{"name": "李四","age": "26","birthday": "1999-08-12"}
]
由中括号包围的就相当于列表类型,列表中的每个元素可以是任意类型,这个示例中它是字典类型,由大括号包围。
JSON 可以由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。
(二)数据写入规范
可以看到,中文字符都变成了 Unicode 字符,这并不是我们想要的结果。
为了输出中文,还需要指定参数 ensure_ascii 为 False,另外还要规定文件输出的编码:
import jsondate = [{'name':'李绍幸','age':'24','birthday':'1999-07-12'
}]
# w写 r读 a追加
with open('D:\桌面\date.json','w',encoding='utf-8') as file:# dumps通常是指json.dumps方法,它来源于内置的json模块。# 该方法用于将Python对象序列化为JSON格式的字符串。# 序列化是指将数据结构或对象状态转换成可存储或传输的格式的过程。#indent指定缩进级别为2,# ensure_ascii: 默认为 True,# 意味着所有非ASCII字符都会被转义成 \uXXXX 序列。如果设置为 False,这些字符将原样输出。file.write(json.dumps(date,indent=2,ensure_ascii=False))
二、CSV文件存储
CSV,全称为(Comma-Separated Values,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据。该文件是一个字符序列,可以由任意教目的记录组成,记录间以某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。不过所有记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式,它比 Excel 文件更加简洁,XLS 文本是电子表格,它包含了文本、数值、公式和格式等内容,而 CSV 中不包合这些内容,就是特定字符分的纯文本,结构简单清晰。所以,有时候用 CSV 来保存数据是比较方便的。本节中,我们来进解 Pvthon 读取和写入CSV 文件的过程。
(一)写入
简单例子:
import csv# 以列表形式写入
with open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id', 'name', 'age'])writer.writerow(['10001','Mike',20])writer.writerow(['10002','Bob',22])writer.writerow(['10003','Jordan',21])import pandas
dic = {'1':'张三','2':'李四','3':'王五'}
df = pd.DataFrame(dic)
df.to_csv('demo.csv',index=None)
首先,打开 data.csv 文件,然后指定打开的模式为 w (即写入),获得文件句柄,随后调用 csv 库的 writer 方法初始化写入对象,传入该句柄,然后调用 writerow 方法传入每行的数据即可完成写入。
如果想修改列与列之间的分隔符,可以传入 delimiter 参数,其代码如下:
import csv# 以列表形式写入
with open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile,delimiter='')writer.writerow(['id', 'name', 'age'])writer.writerow(['10001','Mike',20])writer.writerow(['10002','Bob',22])writer.writerow(['10003','Jordan',21])
(二)多行写入
调用 writerows 方法同时写入多行,此时参数就需要为二维列表,例如:
import csv# 以列表形式写入
with open('data.csv', 'w') as csvfile:writer = csv.writer(csvfile,delimiter='')writer.writerow(['id', 'name', 'age'])writer.writerows([['10001','Mike',20],['10002','Bob',22],['10003','Jordan',21]])
(三)字典写入
用字典来表示。在 csv 库中也提供了字典的写入方式,示例如下:
import csv
with open('data.csv','w') as csvfile:fieldnames =['id','name','age']# 定义一个列表 fieldnames,其中包含我们希望出现在 CSV 文件第一行的字段名,# 它们作为列标题。writer = csv.DictWriter(csvfile,fieldnames=fieldnames)# 调用 writer.writeheader() 方法写入列标题。# 这会基于 fieldnames 列表中的字段名在 CSV 文件中创建第一行writer.writeheader ()writer.writerow({'id': '10001','name':'Mike','age': 203})writer.writerow({'id': '10002','name':'Bob','age' : 22})writer.writerow({'id':'10003','name':'jordan','age': 21})
这段代码执行完成后,将会在当前目录下创建(或覆盖)一个名为 data.csv
的文件,内容如下:
id,name,age
10001,Mike,20
10002,Bob,22
10003,Jordan,21
(四)excel写入
from openpyxl import Workbook
import random'''
数据写入格式
列表嵌套列表 数据按列表的行写入第一列表示第一行,第二列表示第二行[[],[],[]]
'''
#空白文件
wb = Workbook()
# 空白页 内容插入工作簿中索引为 0 的位置
ws = wb.create_sheet('第一页',index=0)
ws.append(['编号','姓名','年龄'])
for i in range(10):id = str(i)name = str('li'+ str(i))age = random.randint(18,30)ws.append([id,name,age])
wb.save('li.xlsx')
(五)爬虫采集入库
import httpx
import csv
res = httpx.get('https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1702977319532&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=2&pageSize=10&language=zh-cn&area=cn')# 将数据变成字典格式
items = res.json()data = []
# 或者data = list()
item = items.get('Data')['Posts']#列表形式
for i in item:title = i.get('RecruitPostName')time = i.get('LastUpdateTime')data.append([title,time])
print(data)with open('date.csv','w',encoding='gbk')as csvfile:writer = csv.writer(csvfile,delimiter=',')writer.writerow(['title','time'])writer.writerows(data)print('写入成功')
三 关系型数据库
关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系型数据库。
关系型数据库有多种,如 SQLite、MySQL、Oracle、SQL Server、DB2等.
(一)安装数据库使其正常运行,并安装pymysql第三方库
(二)连接数据库
这里,首先尝试连接一下数据库。假设当前的 MVSQL运行在本地,用户名为 root,密码为 123456,运行端口为 3306,这里利用PyMySQL 先连接 MySQL,然后创建一个新的数据库,名字叫作 spiders,代码如下:
import pymysql
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
cursor = db.cursor()
cursor.execute('select version()')
# 使用fetchone获取SQL语句执行结果的第一行数据
data = cursor.fetchone()
print('database version:',data)
cursor.execute('create database if not exists spiders default character set utf8')
cursor.execute('use spiders')
sql = "CREATE TABLE If NOT EXISTS students(id VARCHAR(255)NOT NULL,NAME VARCHAR(255)NOT NULL,age INT NOT NULL,PRIMARY KEY(id))"
cursor.execute(sql)
db.close()
(三)创建数据表
import pymysql
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
cursor = db.cursor()
cursor.execute('create database if not exists spiders default character set utf8')
cursor.execute('use spiders')
sql = "CREATE TABLE If NOT EXISTS students(id VARCHAR(255)NOT NULL,NAME VARCHAR(255)NOT NULL,age INT NOT NULL,PRIMARY KEY(id))"
cursor.execute(sql)
db.close()
(四)插入数据
插入、更新和删除操作都是对数据库进行更改的操作,而更改操作都必须为一个事务,所以这些操作的标准写法就是:
具体的参照:mysql第14天之TCL(事务控制语言)-CSDN博客
import pymysql
id = '1'
user = 'lili'
age = 20
# 连接数据库
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306)
cursor = db.cursor()
sql = 'INSERT INTO students VALUES(%s,%s,%s)'try:cursor.execute(sql,(id,user,age))# 提交db.commit()
except:# 回滚db.rollback()
db.close()
(五)字典数据插入
import pymysql
data = {'id':'20220315','name':'菲菲','age':20}
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
keys = ','.join(data.keys())
values = ','.join(['%s'])*len(data)
sql = 'INSERT INTO students({keys}) VALUES({values})'.format(keys=keys,values=values)
try:if cursor.execute(sql,tuple(data.values())):print("Successful!")db.commit()
except:print("Failed")db.rollback()
db.close()
四 Elasticsearch搜索引擎存储
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文博索引擎,基RESTful web接口,Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
重要特性:
分布式的实时文件存储,每个字段都被索引并可被搜索
实时分析的分布式搜索引擎
可以扩展到上百台服务器,处理PB级别结构化或非结构化数据
基本概念:
索引(indlices)-----------database数据库
类型(type)----------------Table表
文档(Document)---------Row行
字段(Field)-----------------Columns列
要注意的是:Elastiearch 本身就是分布式的,因此便你只有一个节点,Elasticsearch 认也会对你的教据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。
(一)安装服务端
地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
相关文章:

网络爬虫 多任务采集
一、JSON文件存储 JSON,全称为 JavaScript 0bject Notation,也就是JavaSript 对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。本节中,我们就来了解如何利用 P…...

真实并发编程问题-1.钉钉面试题
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…...

基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)
前言 我们知道echarts是一个非常强大的绘图库,基于这个库,我们可以绘制出精美的图表。对于一张图来说,其实比较重要的就是配置项,填入不同的配置内容就可以呈现出不同的效果。 当然配置项中除了样式之外,最重要的就是…...

2312llvm,02前端
前端 编译器前端,在生成目标相关代码前,把源码变换为编译器的中间表示.因为语言有独特语法和语义,所以一般,前端只处理一个语言或一组类似语言. 比如Clang,处理C,C,objective-C源码. 介绍Clang Clang项目是C,C,Objective-C官方的LLVM前端.Clang的官方网站在此. 实际编译器(…...

【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 蝙蝠算法(BA)是一种基于群体智能的优化算法,灵感来源于蝙蝠捕食时的回声定位行为。这种算法模拟蝙蝠使用回声定位来探测猎物、避开障碍物的能力。在蝙蝠算法中,每只虚拟蝙蝠代表…...

【数据结构】二叉树的模拟实现
前言:前面我们学习了堆的模拟实现,今天我们来进一步学习二叉树,当然了内容肯定是越来越难的,各位我们一起努力! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 &…...

open3d bug:pcd转txt前后位姿发生改变
1、open3d bug:pcd转txt前后位姿发生改变 open3d会对原有结果进行一个微小位姿变换 import open3d as o3d import numpy as np# 读取PCD点云文件 pcd o3d.io.read_point_cloud(/newdisk/darren_pty/zoom_centered_s2.pcd)# 获取点云坐标 points pcd.points# 指定…...

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用
目录 一、实验 1.部署Ansible自动化运维工具 2.K8S 节点安装nginx 3.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用 二、问题 1.ansible安装报错 2.ansible远程ping失败 3. Jenkins流水线通过ansible命令直接ping多台机器的网络状态报错 一、实验 …...

OpenAI 疑似正在进行 GPT-4.5 灰度测试!
大家好,我是二狗。 今天,有网友爆料OpenAI疑似正在进行GPT-4.5灰度测试! 当网友询问ChatGPT API调用查询模型的确切名称是什么时? ChatGPT的回答竟然是 gpt-4.5-turbo。 也有网友测试之后发现仍然是GPT-4模型。 这是有网友指…...

DC-6靶场
DC-6靶场下载: https://www.five86.com/downloads/DC-6.zip 下载后解压会有一个DC-3.ova文件,直接在vm虚拟机点击左上角打开-->文件-->选中这个.ova文件就能创建靶场,kali和靶机都调整至NAT模式,即可开始渗透 首先进行主…...

单片机应用实例:LED显示电脑电子钟
本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图: 上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据…...

会议剪影 | 思腾合力受邀出席首届CCF数字医学学术年会
首届CCF数字医学学术年会(CCF Digital Medicine Symposium,DMS)于2023年12月15日-17日在苏州CCF业务总部召开。这次会议的成功召开,标志着数字医学领域进入了一个新的时代,计算机技术和人工智能在医学领域的应用和发展…...

node.js mongoose中间件(middleware)
目录 简介 定义模型 注册中间件 创建doc实例,并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 简介 在mongoose中,中间件是一种允许在执行数据库操作前(pre)或后&…...

[Toolschain cpp ros cmakelist python vscode] 记录写每次项目重复的设置和配置 不断更新
写在前面 用以前的设置,快速配置项目,以防长久不用忘记,部分资料在资源文件里还没有整理 outline cmakelist 复用vscode 找到头文件vscode debug现有代码直接关联远端gitros杂记repo 杂记glog杂记 cmakelist 复用 包含了根据系统路径找库…...

【每日OJ—有效的括号(栈)】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1、有效的括号题目: 1.1方法讲解: 1.2代码实现: 总结 前言 世上有两种耀眼的光芒,一种是正在升起的太阳&#…...

.gitignore和git lfs学习
The ninth day——12.18 1. .gitignore 忽略规则优先级 从命令行中读取可用的忽略规则当前目录定义的规则父级目录定义的规则,依次递推$GIT_DIR/info/exclude 文件中定义的规则core.excludesfile中定义的全局规则 忽略规则匹配语法 空格不匹配任意文件ÿ…...

2023-12-18 C语言实现一个最简陋的B-Tree
点击 <C 语言编程核心突破> 快速C语言入门 C语言实现一个最简陋的B-Tree 前言要解决问题:想到的思路:其它的补充: 一、C语言B-Tree基本架构: 二、可视化总结 前言 要解决问题: 实现一个最简陋的B-Tree, 研究B-Tree的性质. 对于B树, 我是心向往之, 因为他是数据库的基…...

vite与webpack?
vite对比react-areate-app 1、构建速度 2、打包速度 3、打包文件体积...

距离矩阵路径优化Python Dijkstra(迪杰斯特拉)算法和冲突驱动子句学习
Dijkstra算法 Dijkstra 算法是一种流行的寻路算法,通常用于基于图的问题,例如在地图上查找两个城市之间的最短路径、确定送货卡车可能采取的最短路径,甚至创建游戏地图。其背后的直觉基于以下原则:从起始顶点访问所有相邻顶点&am…...

Selenium安装WebDriver:ChromeDriver与谷歌浏览器版本快速匹配_最新版120
最近在使用通过selenium操作Chrome浏览器时,安装中遇到了Chrome版本与浏览器驱动不匹配的的问题,在此记录安装下过程,如何快速找到与谷歌浏览器相匹配的ChromeDriver驱动版本。 1. 确定Chrome版本 我们首先确定自己的Chrome版本 Chrome设置…...

系统架构设计师教程(七)系统架构设计基础知识
系统架构设计基础知识 7.1 软件架构概念7.1.1 软件架构的定义7.1.2 软件架构设计与生命周期需求分析阶段设计阶段实现阶段构件组装阶段部署阶段后开发阶段 7.1.3 软件架构的重要性 7.2 基于架构的软件开发方法7.2.1 体系结构的设计方法概述7.2.2 概念与术语7.2.3 基于体系结构的…...

Bifrost 中间件 X-Requested-With 系统身份认证绕过漏洞复现
0x01 产品简介 Bifrost是一款面向生产环境的 MySQL,MariaDB,kafka 同步到Redis,MongoDB,ClickHouse等服务的异构中间件 0x02 漏洞概述 Bifrost 中间件 X-Requested-With 存在身份认证绕过漏洞,未经身份认证的攻击者可未授权创建管理员权限账号,可通过删除请求头实现身…...

OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击
1. 引言 OpenSSL新发布的3.20版本中,引入了一些新特性,包括: post-quantum方法Brainpool曲线QUICArgon2:Argon2 是一种慢哈希函数,在 2015 年获得 Password Hashing Competition 冠军,利用大量内存计算抵…...

数据结构--稀疏矩阵及Java实现
一、稀疏 sparsearray 数组 1、先看一个实际的需求 编写的五子棋程序中,有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了很多没有意义的数据.->稀疏数组。 2、稀疏数组基本介绍 当一个数组中大部分元素为0…...

关于GPU使用过程中的若干问题
1.CUDA异常 问题描述:运行torch.cuda.is_available() 报错:cuda unknown error - this may be due to an incorrectly set up environment解决方案:重启 2.nvidia驱动版本不匹配 问题描述:运行nvidis-smi 报错:Fa…...

spring之面向切面:AOP(2)
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...

【开题报告】基于uniapp的家庭记账小程序的设计与实现
1.研究背景 随着社会经济的发展和人们生活水平的提高,家庭财务管理变得越来越重要。家庭记账是一种重要的财务管理方式,通过记录和分析家庭的收入和支出情况,可以帮助家庭成员更好地理解和掌握自己的财务状况,合理规划和管理家庭…...

HTML5面试题
HTML5面试题 什么是HTML5?它与HTML4有何不同之处? HTML5是HTML的第五个主要版本,它引入了许多新的语义化元素、API和功能,以改进网页的结构、样式、交互和多媒体体验。 HTML5与HTML4的不同之处包括: 引入了一系列新的语…...

树莓派通过网线连接电脑并且设置设置链接wifi
好久没玩过树莓派了,系统进不去了,需要记录一下,之前总觉得自己会了,但是还是需要不断的翻阅资料。 树莓派 配置SD卡开启ssh - 哔哩哔哩 树莓派通过网线连接ssh 直接在sd卡建立一个ssh的文件,不要带任何后戳 ip查…...

C#拼接JSON
一、业务背景 最近项目需要与U8c对接,实现增删改查,借此机会,梳理一下C#解析Json字符串的问题。 这篇文章,先以新增接口为例。 二、新增接口 查看需要传入的json格式。 拼接json,无非就是{}和[]的来回嵌套。 首先&am…...