文章目录
- 一、文件操作
- 1.概念
- 2.文件
- 3.二进制
- 二、基本文件操作
- 三、乱码产生
- 四、with open() as f
- 五、代码实现文件复制粘贴
- 六、try ... except ...
- 七、代码比较
一、文件操作
1.概念
帮助我们把爬虫抓下来的数据,进行保存。
2.文件
在计算机中,没有pdf,word,txt,csv,image,video,music,excel概念,只有文件的概念。
一个成功的文件 = 成功的文件名 + 成功的文件内容,比如:
歌曲 = 告白气球.mp3 + 歌曲的数据
视频 = 告白气球.mp4 + 视频的数据
图片 = 告白气球.jpg + 图片的数据
3.二进制
在计算机中,所有的图片、视频、音乐都是用二进制数据存储的。
image,video,music 数据 == 二进制数据【binary】
二、基本文件操作
A、新建文件:用法如下
open(文件名, 操作方式[读, 写])
B、操作文件:用法如下
read() or write()
C、保存退出:用法如下
close()
代码示例如下所示:
# 1.新建文件
f = open('Python.txt', 'w')
# 2.操作文件
f.write('hello')
# 3.保存退出
f.close()
说明:代码中的f是电脑内存中虚拟的文件,将内容写入后,通过close()方法把虚拟文件保存到本地
操作方式中的写,常用的有三种:
- w:只能写字符串 ----> 会覆盖之前数据 ----> 要写encoding=‘utf-8’
- a/a+:只能写字符串 -----> 追加写入数据 ----> 要写encoding=‘utf-8’
- wb:写入二进制数据 -----> 用于保存图片、音乐、视频 ----> 不能写encoding=‘utf-8’
操作方式中的读,有两种:
- r:读出来的是字符串 ----> 要写encoding=‘utf-8’
- rb:读出来的是二进制(几乎不用) ----> 不能写encoding=‘utf-8’
读字符串这里需要注意,分为两种读取方式:
A、一次性读取全部文件(用的不多):代码示例如下
f = open('古诗.txt', 'r', encoding='utf-8')
data = f.read()
f.close()
print(data)
B、一行一行读取文件(经常用):代码示例如下
f = open('古诗.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())
三、乱码产生
如下代码,当写入中文内容时:
# 1.新建文件
f = open('Python.txt', 'w')
# 2.操作文件
f.write('我爱你')
# 3.保存退出
f.close()
运行代码会发现出现乱码,如下图:
这是因为编码和解码方式不同导致的,解决方案如下模版:
open(文件名, 操作方式, encoding='utf-8')
注意:encoding=‘utf-8’ 只针对字符串的读写操作。
代码示例如下所示:
# 1.新建文件
f = open('Python.txt', 'w', encoding='utf-8')
# 2.操作文件
f.write('我爱你')
# 3.保存退出
f.close()
四、with open() as f
上面我们创建文件到保存文件总公共使用了三步:
A、新建文件:open()
B、读写文件:read() or write()
C、关闭文件:close()
我们会发现很繁琐,需要写3行代码,可以将A和C进行合并,合并之后的代码是with open() as f,中间的B正常写,open()里面也是正常写,代码示例如下:
with open('古诗.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line.strip())
五、代码实现文件复制粘贴
需求:实现03.py文本复制,思路如下:
- 先把03.py的文件内容读出来
- 再把03.py的内容写到新文件
具体代码如下:
# 读
with open('03.py', 'r', encoding='utf-8') as f:
data = f.read()
# 写
with open('【新】03.py', 'a+', encoding='utf-8') as f:
f.write(data)
print('文件复制完成')
六、try … except …
该语句是用来处理异常,可以理解为:
try ... except ...
尝试 ... 期望 ...
尝试 执行xxxx代码 如果xxxx代码报错了 执行期望部分
代码示例如下所示:
# 1、导入请求库
import requests
# 2、准备网址
url = 'https://pic.netbian.com/uploads/allimg/220131/012219-1643563339f065.jpg'
# 3、发送请求
data = requests.get(url).content
# 4、保存
file_name = '小姐姐.jpg'
try:
with open(file_name, 'wb') as f:
f.write(data)
print('下载完成: {}'.format(file_name))
except:
print('下载失败: {}'.format(file_name))
七、代码比较
如下图所示两组代码:
两组代码功能上是一样的,但是一般在开发中用下面这组代码,更加美观,所以之后异常处理用下面的代码:
try:
pass
except Exception as e:
pass