TXT文本文件存储
将数据保存为 TXT 文本的操作非常简单,而且 TXT 文本几乎兼容任何平台,但是这也有个缺点,就是不利于检索。所以如果对检索和数据结构的要求不高,追求方便第一的话,就可以采用 TXT 文本存储。
我们接下来看一下利用 Python 保存 TXT 文本文件的方法。
本节目标
我们以电影实例网站 https://ssr1.scrape.center/ 为例,爬取首页 10 部电影的数据,然后将相关信息存储为 TXT 文本格式。
基本实例
示例代码如下:
import requests
from pyquery import PyQuery as pq
import re
url = 'https://ssr1.scrape.center/'
html = requests.get(url).text
doc = pq(html)
items = doc('.el-card').items()
file = open('movies.txt', 'w', encoding='utf-8')
for item in items:
# 电影名称
name = item.find('a > h2').text()
file.write(f'名称: {name}\n')
# 类别
categories = [item.text() for item in item.find('.categories button span').items()]
file.write(f'类别: {categories}\n')
# 上映时间
published_at = item.find('.info:contains(上映)').text()
published_at = re.search('(\d{4}-\d{2}-\d{2})', published_at).group(1) \
if published_at and re.search('(\d{4}-\d{2}-\d{2})', published_at) else None
file.write(f'上映时间:{published_at}\n')
# 评分
score = item.find('p.score').text()
file.write(f'评分:: {score}\n')
file.write(f'{"=" * 50}\n')
file.close()
python
这里的目的主要是演示文件的存储方式,因此省去了 requests 异常处理部分。首先,用 requests 库提取网站首页的 HTML 代码,然后利用 pyquery 解析库将电影的名称、类别、上映时间、评分信息提取出来。
利用 Python 提供的 open 方法打开一个文本文件,获取一个文件操作对象,这里赋值为 file,每提取一部分信息,就利用 file 对象的 write 方法将这部分信息写入文件。
全部提取完毕之后,调用 close 方法将 file 对象关闭,这样抓取的网站首页的内容就成功写入文本中了。
运行程序,可以发现在本地生成了一个 movies.txt 文件,其内容如图 4-1 所示。

可以看出,电影信息的的内容已经被保存成了文本形式。
回过头来看下本节重点需要了解的内容,即文本写入操作,其实就是 open、write、close 这三个方法的用法。
open 方法的第一个参数是要保存的目标文件名称; 第二个参数代表数据以何种方式写入文本,此处为 w,表示以覆盖的方式写人; 第三个参数指定了文件的编码为utf-8。最后,写入完成后,还需要调用 close 方法来关闭文件对象。
打开方式
在刚才的实例中,open 方法的第二个参数设置成了 w,这样在每次写入文本时都会清空源文件,然后将新的内容写入文件。w 只是文件打开方式的一种,下面简要介绍一下其他几种。
-
r:以只读方式打开一个文件,意思是只能读取文件内容,而不能写入。这也是默认模式。
-
rb:以二进制只读方式打开一个文件,通常用于打开二进制文件,例如音频、图片、视频等。
-
r+:以读写方式打开一个文件,既可以读文件又可以写文件。
-
rb+:以二进制读写方式打开一个文件,同样既可以读又可以写,只不过读取和写入的都是二进制数据。
-
w:以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
-
wb:以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
-
w+:以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
-
wb+:以二进制读写格式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件。
-
a:以追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写到已有内容之后。如果该文件不存在,则创建新文件来写入。
-
ab:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。也就是说,新的内容将会被写到已有内容之后。如果该文件不存在,则创建新文件来写入。
-
a+:以读写方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。文件打开时会是追加模式。如果该文件不存在,则创建新文件用于读写。
-
ab+:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾。如果该文件不存在,则创建新文件用于读写。
简化写法
文件写人还有一种简写方法,就是使用 with as 语法。当 with 控制块结束时,文件会自动关闭,意味着不需要再调用 close 方法。
这种保存方式可以简写如下:
with open('movies.txt', 'w', encoding='utf-8'):
file.write(f'名称:{name}\n')
file.write(f'类别:{categories}\n')
file.write(f'上映时间:{published_at}\n')
file.write(f'评分:{score}\n')
python
以上便是利用 Python 将结果保存为 TXT 文件的方法,这种方法简单易用、操作高效,是一种最基本的数据存储方法。