发布时间:2025-07-17
浏览次数:0
在数据驱动的时代,众多行业对数据搜集的需求持续上升,网络爬虫的应用范围也随之扩大。因此,越来越多的人投身于网络爬虫技术的学习。K哥爬虫在此之前已经发布了众多关于爬虫进阶和逆向工程的文章。为了满足从入门到精通的全面需求,特别开设了【零基础学爬虫】专栏,旨在协助初学者迅速掌握爬虫技能,本期内容聚焦于文件存储。
概述
在先前的几篇文章里,我们已掌握了请求库和解析库的应用,并且学会了向目标网站发起请求并解析其返回的信息。接下来,我们还需了解如何对数据进行保存。数据存储的方法众多,本期内容将重点讲解如何将数据保存至文本文件中,例如 TXT、JSON、CSV 格式的文件。
TXT 文件存储介绍
TXT格式的文件是数据保存的基础形式,这种文本文件几乎能在所有平台上顺利运行,因而其应用范围十分广泛。通过编程对TXT文件进行操作相对简便,然而其不足之处也十分突出,那就是在数据检索方面存在不便。
使用
中操作 TXT 文件需要使用到内置的 open() 函数。
打开文件,采用读取模式,参数分别为:无、无、无、无、无、以及一个布尔值,值为真。
open() 函数有七个参数分别为:
file:文件路径
mode:打开方式,默认为(r)只读模式
:文件缓冲
:字符编码
:报错级别
:换行模式,默认以\n换行
:控制在关闭文件时是否彻底关闭文件
文件打开方式分为以下几种:
r:以只读方式打开文件
以写入模式对文件进行操作。若文件已存在,将替换原有内容;若文件不存在,则创建新文件。
x:创建新文件并以写入方式打开文件
采用追加模式对文件进行操作。若文件已存在,数据将被添加至文件末尾;若文件不存在,则会创建一个新的文件。
b:二进制模式
t:文本模式
+:读取与写入
以二进制模式对文件进行开启。若文件业已存在,将替换原有内容;若文件尚未存在,则创建新文件。
以读写模式对文件进行操作。若文件已存在,将覆盖原有内容;若文件不存在,则创建新文件。
以二进制模式对文件进行读写操作。若文件已存在,将替换原有内容;若文件不存在,则创建新文件。
采用二进制追加模式来开启文件。若文件业已存在,数据将被添加至其末尾;若文件尚不存在,则新文件将被创建。
以二进制模式进行文件的追加读写操作。若文件已存在,数据将被添加至文件末尾;若文件不存在,则将创建一个新文件。
f = 文件对象,通过使用open函数以读取模式打开名为"data.txt"的文件,并指定编码为"utf-8"。
f.seek(2) #从指定下标位置开始读取
data = f.read()
f.close()
f = 文件以写入模式打开,名为"data.txt",并指定编码为"utf-8"。
f.write('hello')
f.write(' ')
f.write('world')
f.close()
#hello world
上下文管理器
在上文中,我们可以观察到,执行文件读写操作之后,必须调用 close() 方法来终止文件的打开状态。若忽视这一步骤,文件资源可能会发生泄漏。为了防止此类问题的发生并提升代码的效率,我们应当采用上下文管理器来管理文件的打开与关闭。
使用“open”函数,以写入模式打开名为“data.txt”的文件,指定编码为“uutf-8”,并将文件对象赋值给变量“f”。
f.write('hello')
f.write(' ')
f.write('world')
使用with语句块后,文件会自动完成关闭操作,因此无需额外调用close()函数。
JSON 文件存储介绍
JSON的全称是对象表示法sublime text 3 保存,也称作对象标记,它是一种轻量级的数据交换格式。人们能够轻松地阅读和编写JSON格式的数据,这同样也便于机器进行解析和生成。JSON采用了一种完全独立于程序语言的文本格式,尽管如此,它也借鉴了类C语言的习惯,如C、C++、C#、Java、Perl等。这些特性使 JSON 成为理想的数据交换语言。
JSON 通过将对象与数组结合使用来构建数据结构,在这种结构中,所有元素均以对象的形式存在,从而使得各种数据类型均能被 JSON 所承载。
{ key1 : }, {key2 : }
对象与数组可灵活搭配,相互嵌套。在JSON格式中,字符串类型的数据必须用双引号括起来。
JSON的结构既简洁又明了,其组织严密,故而受到了广泛的青睐和应用。
使用
JSON 是一种数据存储格式,其核心为纯字符串形式,在处理过程中,它能被转换成相应的数据类型,例如,对象型数据可转化为字典,数组型数据则可变为列表。此外,编程环境中内置了功能强大的 JSON 库,借助该库,我们可以轻松地完成 JSON 文件的读写操作。
JSON 库提高了四个方法:
json.dump():将 JSON 对象写入文件
json.dumps():将对象编码成 JSON 字符串
json.load():从 JSON 文件中读取数据
json.loads():此函数的功能是将经过编码的JSON格式的字符串转换成为相应的数据对象。
下面我们以这段数据作为示例:
{
"1001": {
"name": "张三",
"age": 21,
"gender": "female"
},
"1002": {
"name": "李四",
"age": 22,
"gender": "male"
}
}
读取数据
data.json 文件内容为示例 JSON 数据。
使用“open”函数打开名为“data.json”的文件,以读取模式进行操作,并指定编码为“utf-8”,然后将其赋值给变量f。
data = f.read()
print(type(data))
#输出:
观察可知,直接从 JSON 文件中提取的数据属于字符串格式,这样的形式并不便于我们对其进行处理;为此,我们可以借助 json.loads() 函数,将 JSON 字符串转换成字典类型。
import json
with open('data.json','r',encoding='utf-8')as f:
data = f.read()
print(type(data))
data = json.loads(data)
print(type(data))
#输出:
#
#
我们同样可以采用更为精炼的表达方式,借助json.load()函数,直接对文件中的操作对象进行解析处理。
import json
data等于json模块加载的open函数打开的文件data.json,该文件使用utf-8编码格式。
print(type(data))
#输出:
写入数据
在执行write()函数写入文件的过程中,仅能接受字符串形式的数据输入。鉴于此,我们需先将字典内容转换成JSON格式的字符串,这一转换过程可以通过调用json.dumps()函数来完成。
import json
data = {
"1001": {
"name": "张三",
"age": 21,
"gender": "female"
},
"1002": {
"name": "李四",
"age": 22,
"gender": "male"
}
}
print(data)
data = json.dumps(data)
print(type(data))
打开文件“data.json”,以写入模式进行操作,指定编码为“utf-8”,并使用变量f作为文件对象。
f.write(data)
#输出:
#
#
当然,将数据写入文件也有更加简便的方法。
import json
data = {
"1001": {
"name": "张三",
"age": 21,
"gender": "female"
},
"1002": {
"name": "李四",
"age": 22,
"gender": "male"
}
}
将数据序列化后,写入名为“data.json”的文件中,采用写入模式,指定编码为UTF-8,格式化输出,缩进为2个空格,并确保非ASCII字符得以正确保存。
CSV 文件存储介绍
CSV,即Comma- (逗号分隔值)的缩写,是一种以纯文本格式保存数据表格的方式。这种文件类型包含一系列字符序列,由多个记录构成,而这些记录通过特定的换行符进行区分。每一条记录由多个字段及其对应的值组成,字段与字段之间通常由特定的字符或字符串分隔,其中最常用的分隔符是逗号或制表符。CSV并非一个单一且明确定义的文本格式,而是广泛涵盖具有以下特点的各类文件:
纯文本数据由特定字符集构成sublime text 3 保存,这些数据以记录的形式存在。每条记录通过分隔符被划分为若干字段。这些字段在每条记录中均按照固定的序列排列。
中提供了一个内置的 csv 库来对 CSV 文件进行操作。
写入
import csv
由于writerow默认执行换行操作,因此必须对换行符进行设置,将其值设为空,以防止出现不必要的重复换行现象。
打开文件“data.csv”,以写入模式进行操作,指定编码为UTF-8,并确保每行数据后不添加额外的换行符。
#delimiter:指定分隔符,默认为逗号
csvfile对象被赋予了一个csv.writer实例,该实例是通过将csvfile作为第一个参数,将空格字符作为分隔符传递给writer函数来创建的。
#写入一行
执行writer.writerow操作,参数为包含['id', 'name', 'age']的列表。
写入数据时,指定了编号为1001,姓名为jack,年龄为15岁的记录。
writer.writerow(['编号1002', '姓名marin', '年龄22岁'])
写入数据时,写入器记录了编号为1003的记录,其中包含用户名为alex的信息,并且年龄为19岁。
#写入多行
writer执行写入行操作,输入参数为[['1004', 'lucy', 23], ['1005', 'john', 30]]。
csv库也提供了其它的写入方法
import csv
with open('data.csv','w',encoding='utf-8',newline="") as csvfile:
#字典写入对象
定义了一个名为writer的变量,它是一个DictWriter对象,该对象与csvfile对象相关联。指定了字段名列表fieldnames,包含'id'、'name'和'age'三个字段。
writer.writeheader()
writer.writerow({'id': '1001', 'name': 'jack', 'age': 21}),该行数据记录了ID为1001的用户,姓名为jack,年龄为21岁。
writer.writerow({'id': '1002', 'name': 'marin', 'age': 22}),此行代码中,id字段被赋值为'1002',name字段被赋值为'marin',而age字段则被设定为22岁。
writer向表格中写入多行数据,其中第一行数据包含ID为1003、姓名为lucy、年龄为23岁,第二行数据则包含ID为1004、姓名为mike、年龄为22岁。
读取
import csv
打开名为“data.csv”的文件,以读取模式进行操作,并确保使用UTF-8编码解码。
reader = csv.reader(csvfile)
for row in reader:
print(row)
总结
上文阐述了TXT、JSON、CSV这三种文件格式的存储方法,并对它们如何进行读写操作进行了说明。文本文件因其简洁和易用性,在存储少量信息时颇具优势,然而,若需规范地保存数据,则不太建议采用文本文件进行存储。
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码