网页数据的存储--存储为文本文件(TXT、JSON、CSV)

news/发布时间2024/5/15 23:35:44

        用解析器解析出数据后,接下来就是存储数据了。数据的存储有多种多样,其中最简单的一种是将数据直接保存为文本文件,如TXT、JSON、CSV等。这里就介绍将数据直接保存为文本文件。

目录

一、Python存储数据的方法

1、 文件读取

2、 文件写入

3、文件复制

 4、文件读写模式

二、TXT文本文件存储

三、JSON文件存储

1、对象和数组

2、读取JSON

3、输出JSON

 四、CSV文件存储

1、写入

2、读取


一、Python存储数据的方法

        在Python中有一个内置的方法--open方法可以将数据进行存储、读写,使用open方法操作文件就像把大象塞进冰箱一样, 可以分三步走,一是打开文件,二是操作文件,三是关闭文件。 

1、 文件读取

  • f=open(测试1.txt,mode='r,encoding=utf-8’)     读取指定位置的文件,文件编码为utf-8
  • f.read()             读取文件的所有内容
  • f.readline()       读取文件的一行数据
  • f.readlines()     从文件中一次读取所有行到一个列表中

 示例如下:

# 打开文件,指定文件位置,进行读取操作,采用utf-8编码
# f = open(r'D:\Python Files\Spider\文件操作\abc.txt', mode='r', encoding='utf-8')
# 读取文件所有数据
txt = f.read()
# 读取文件的一行数据
txt = f.readline()
print(txt, end='')
# 通过循环的方式,读取文件的每一行数据可以读取完文件的所有数据等于read方法
while txt:txt = f.readline()print(txt, end='')
# 从一个文件中一次读取所有行到一个列表中。
txt = f.readlines()
print(txt)
# 关闭文件
f.close()
print(f.closed)

        但是由于每次采用open方法需要手动的写close方法来关闭文件,如果不关闭文件容易出现文件数据丢失等问题。所以,python中有一个with方法,对文件操作完成后,会自动关闭文件。示例如下:

#输入文件路径,操作方法和编码方式,将其句柄赋给f,通过f来对文件进行操作,操作完后会自动关闭文件 
with open('abc.txt', 'r', encoding='utf-8') as f:txt = f.read()
print(f.closed)

2、 文件写入

  • f=open(‘测试1.txt',mode=w',encoding='utf-8')    指定文件的存储位置,文件编码为utf-8
  • f.write(‘字符串’)      给文件写入字符串数据
  • f.writelines(‘列表’)    给文件写入列表数据

示例如下: 

s = '今天天气真好!'
l = ['a', 'b', 'c']
with open('测试2.txt', 'w', encoding='utf-8') as f:f.write(s)f.writelines(l)

3、文件复制

        现在,我们已经了解了文件的读取与写入,结合这两种办法可以进行文件复制。首先我们指定文件读取的位置和写入文件的存储位置,然后将读取的文件的数据写入指定存储文件的位置。这样,就实现了文件的复制。

示例代码如下:

复制文件
f1 = open('abc.txt', 'r', encoding='utf-8')
f2 = open('abc1.txt', 'w', encoding='utf-8')
f2.writelines(f1.readlines())
f1.close()
f2.close()

 4、文件读写模式

        在使用open方法或者with方法的时候,需要传入一个参数来说明对文件的操作模式。存在各种形式的操作模式,每种操作模式的功能不同。下图介绍所有参数的操作模式:

二、TXT文本文件存储

        将数据保存为TXT文件的操作非常简单,而且TXT文本几乎兼容任何平台,但不利于检索。如果对检索和数据结构的要求不高,追求方便的话就可以采用TXT文本存储。在将数据写入的时候,在指定文件的位置的时候,以txt做文件的后缀名,即可将数据以txt的形式存储。示例如下:

s = '今天天气真好!'
l = ['a', 'b', 'c']
with open('测试2.txt', 'w', encoding='utf-8') as f:f.write(s)f.writelines(l)

        这里将字符串信息和列表信息都以txt形式存储的测试2文件中,指定以utf-8的形式进行编码。

三、JSON文件存储

        JSON,也就是JavaScript对象标记,通过对象和数组的组合来表示数据,构造简洁、结构化程度非常高,是一种轻量级的数据交换格式。 

1、对象和数组

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

     对象在JavaScript 中是指用花括号{}包围起来的内容,数据结构是 {key1: value1, key2:value2,…}这种键值对结构。在面向对象的语言中,key表示对象的属性、value 表示属性对应的值,前者可以使用整数和字符串表示,后者可以是任意类型。

        数组在 JavaScript 中是指用方括号[]包围起来的内容,数据结构是 ["java","javascript","vb",…]这种索引结构。在JavaScript 中,数组是一种比较特殊的数据类型,因为它也可以像对象那样使用键值对结构,但还是索引结构用得更多。同样,它的值可以是任意类型。所以,一个 JSON 对象可以写为如下形式:

[{
"name": "Bob",
"gender": "male",
"birthday": "1992-10-18"
},{
"name": "Selina",
"gender": "female",
"birthday": "1995-10-18"
}]

        由[ ]包围的内容相当于数组,数组中的每个元素都可以是任意类型,这个实例中的元素是对象,由{} 包围。JSON 可以由以上两种形式自由组合而成,能够嵌套无限次,并且结构清晰,是数据交换的极佳实现方式。

2、读取JSON

        Python为我们提供了简易的JSON库,用来实现JSON文件的读写操作,可以调用loads方法将JSON文本字符串转为JSON对象。实际上,JSON对象就是Python中列表和字典的嵌套与组合。反过来,我们可以通过dumps方法将JSON对象转为文本字符串。 

示例代码如下:

str = '''
[{
"name": "Bob",
"gender": "male",
"birthday": "1992-10-18"
},{
"name": "Selina",
"gender": "female",
"birthday": "1995-10-18"
}]
'''
import json
print(type(str))
data = json.loads(str)
print(data)
print(type(data))

3、输出JSON

        可以调用dumps方法将JSON对象转化为字符串,然后调用文件的write方法将字符串写入文本。 

示例代码如下:

import json
data = [{'name':'Bob','gender':'male','birthday':'1970-01-01'        }
]
with open('data.json', 'w',encoding='utf-8') as f:f.write(json.dumps(data))

        如果JSON对象中存在中文, 中文字符会被编码成Unicode字符。想要不将中文自动编码,直接输出中文,只需将参数ensure_ascii设置为False即可。示例代码如下:

import json
data = [{'name':'Bob','gender':'male','birthday':'1970-01-01'}
]
with open('data.json', 'w',encoding='utf-8') as f:f.write(json.dumps(data,ensure_ascii=False))

 四、CSV文件存储

        CSV,逗号分割直或字符分割直,以纯文本的形式存储表格数据,相当于一个结构化表的纯文本形式。它不具备Excel中的数值、公式和格式等内容,就是以特定字符作为分隔符纯文本,结构简单清晰。

1、写入

        在将数据写入的时候,在指定文件的位置的时候,以csv做文件的后缀名,即可将数据以csv的形式存储。

示例代码如下:

import  csv
with open('data.csv', 'w') as csvfile:wr = csv.writer(csvfile)wr.writerow(['id','name','age'])wr.writerow(['101','Mike','21'])wr.writerow(['102', 'May', '22'])wr.writerow(['103', 'Zang', '24'])

结果如下:

id,name,age101,Mike,21102,May,22103,Zang,24

         写入csv文件的文本默认以逗号分隔每条记录,每调用writerow方法是写入一行数据,如果想修改列与列之间的分隔符,可以传入delimiter参数。其代码如下:

import  csv
with open('data.csv', 'w') as csvfile:wr = csv.writer(csvfile,delimiter=' ')wr.writerow(['id','name','age'])wr.writerow(['101','Mike','21'])wr.writerow(['102', 'May', '22'])wr.writerow(['103', 'Zang', '24'])

结果如下:

id name age101 Mike 21102 May 22103 Zang 24

        还可以使用writerows方法同时写入多行,此时参数需要传入二维列表。示例代码如下:

import  csv
with open('data.csv', 'w') as csvfile:wr = csv.writer(csvfile)wr.writerow(['id','name','age'])wr.writerows([['101','Mike',21],['102', 'May', 22],['103', 'Zang', 24]])

        此外,爬取爬取的数据大都是结构化数据,这里一般用字典来表示。下面就尝试一下用字典来写入,示例代码如下:

import csvwith open('data.csv', 'w') as csvfile:fieldnames = ['id', 'name', 'age']wr = csv.DictWriter(csvfile, fieldnames=fieldnames)wr.writeheader()wr.writerow({'id':'101','name':'Mike','age':21})wr.writerow({'id': '102', 'name': 'May', 'age': 32})wr.writerow({'id': '103', 'name': 'Zang', 'age': 24})

2、读取

        读取的时候,我们需要通过遍历列表的方式来读取CSV的内容。因为reader方法是将CSV中的内容每一行以列表的方式读出,如果有中文需要制定编码方式。示例代码如下:

import csv
with open('data.csv', 'r', encoding='utf-8') as csvfile:r = csv.reader(csvfile)for row in r:print(row)

结果如下:

['id', 'name', 'age']
[]
['101', 'Mike', '21']
[]
['102', 'May', '32']
[]
['103', 'Zang', '24']
[]

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

第2部分 基础篇 第2章 区块链技术(2)

2.4.3. 区块链几个核心概念 本聪老师:大家了解哪些区块链概念? 小明:去中心化、智能合约。 小云:共识机制,还有共识算法。 本聪老师:好的,我们从比特币开始,因为区块链诞生于比特…

Stable Diffusion 3震撼发布模型与Sora同架构

Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy Stability AI发布Stable Diffusion 3文本到图像模型。该模型采用扩散变换架构…

git中将所有修改的文件上传到暂存区

案例: 我将本地的多个文件进行了修改,导致文件发生了变化。使用git status命令,查看文件的状态,发现有多个文件是modified,即被修改了。 本地文件发生了变化,需要将modified的文件添加到暂存区&#xff0c…

力扣精选100道——外观数列(模拟专题)

外观数列算法题链接 🚩了解题意 该题的下面充分的给你说明了这个题目的意思。 3 3 2 2 2 5 1 我们根据我们正常读的顺序读 俩个3 三个2 一个5 一个1 连起来就是 2 3 3 2 1 5 1 这就是最终输出的字符串。 题目开头说了,我们最初是 1开始读…

nginx 模块 常见内置变量 location

一、nginx 模块 ngx_http_core_module 核心模块 ngx_http_access_module 访问控制模块 deny allow ngx_http_auth_basic_module 身份验证 小红小名(虚拟用户) ftp也有虚拟用户 ngx_http_gzip_module 压缩模块 ngx_http_gzip_static_modul…

华为配置直连三层组网直接转发示例

华为配置直连三层组网直接转发示例 组网图形 图1 配置直连三层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

qt_day3

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置账户和密码的登录标签ui->lab1->setPixmap(QPixmap(":/pictrue/wodepeizhenshi.png"));…

【NI-DAQmx入门】构建应用程序案例2(经典界面配置、流盘)(建议大家学习)

此范例展示了DAQ常规的一个简单界面设计案例,仅是学习使用。 范例包含以下LabVIEW编程常用知识:UI设计、窗口缩放、子面板、启动画面、自定义控件、选项卡控件、表格、对话框,光标、状态更新、运行时菜单等等。 支持界面跳转配置DAQ通道&…

《MySQL MVCC 》

什么是 MySQL InnoDB 的 MVCC? MVCC (Multi-Version Concurrency Control)是一种基于多版本的并发控制协议,只有在 InnoDB 引擎下存在。MVCC 是为了实现事务的隔离性,即通过版本号,避免同一数据在不同事务间的竞争,可…

并行编程的力量:Python多进程应用全解析

并行编程的力量:Python多进程应用全解析 引言理解Python中的多进程Python中的multiprocessing模块创建进程进程间通信进程同步 多进程与多线程的选择 快速开始:创建第一个多进程程序示例代码进程启动和执行注意事项 深入理解进程间通信(IPC&a…

什么是ChatGPT

国外有篇文章解释了ChatGPT的开发技术是什么,GPT-3和GPT-4的区别,以及未来的可能性。 截至 2023 年,ChatGPT 等生成式 AI 服务正在全球引起关注,并且正在探索在广泛领域的应用。 您可能想知道 ChatGPT 是使用哪种开发技术制作的&a…

深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本?

深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入…

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务,Autofac是面向.net 的开源IOC容器,支持通过接口、实例、程序集等方式注册组件和服务,同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…

网络基础:通信原理及网络协议

集线器:一个口收到的信号原封不动地转发给其他所有口,其他口上的设备自己决定是否接收信号。有点类似广播,但必广播更纯粹。由于hub只是单纯地转发,所以工作在物理层(OSI第一层) 类似于广播模式&#xff0c…

域名 SSL 证书信息解析 API 数据接口

域名 SSL 证书信息解析 API 数据接口 网络工具,提供域名 SSL 证书信息解析,多信息查询,毫秒级响应。 1. 产品功能 提供域名 SSL 证书信息解析;最完整 SSL 属性信息解析;支持多种元素信息抽取,包括主题的可…

【科普知识】什么是电机的开环和闭环

电机是现代工业和生活中不可或缺的一部分,无论是电动工具、电动汽车还是工业机器人,都离不开电机的驱动。电机的控制系统根据有无反馈信号可以分为开环和闭环两种类型,这两种系统各有其特点和应用场景。 01.开环控制系统 开环控制系统是电机控…

MaxScale实现mysql8读写分离

MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…

Android相机调用-libusbCamera【外接摄像头】【USB摄像头】 【多摄像头预览】

有的自定义系统,对于自己外接的USB摄像头,android原生的camera和camera2都无法打开,CameraX也用不了。这时候就要用libusbCamera,这个库可以打开摄像头,还可以多摄像头同时预览。本文主要是同时打开3个USB摄像头的项目…

可控核聚变新里程碑!AI成功预测等离子体撕裂登Nature,清洁能源「圣杯」更近一步

可控核聚变,又有新突破了! 长期以来,核聚变一直受着一个「幽灵」的困扰——等离子体不稳定性问题。 而最近,普林斯顿团队用AI提前300毫秒预测了核聚变等离子不稳定态,这个时间,就足够约束磁场调整应对等离…

数组与指针相关

二级指针与指针数组 #include <stdio.h> #include <stdlib.h> int main() { // 定义一个指针数组&#xff0c;每个元素都是一个指向int的指针 int *ptr_array[3]; // 为指针数组的每个元素分配内存 ptr_array[0] malloc(2*sizeof(int)); ptr_array[1] m…
推荐文章