1. 读文件
1.1 读文本文件
# 1.打开文件
file_object = open('info.txt', mode='rt', encoding='utf-8')
# 2.读取文件内容,并赋值给data
data = file_object.read()
# 3.关闭文件
file_object.close()
print(data)
1.2 读图片等非文本内容文件
file_object = open('a.png', mode='rb')
data = file_object.read()
file_object.close()
print(data)
注意:
- 区分绝对路径和相对路径。相对路径是相对某一个位置而言的, 绝对路径是从硬盘分区开始的。
- 读文件时,若文件不存在则会报错
可以先进行判断文件是否存在,再进行读操作,代码如下所示。
# 判断路径是否存在?
import os
file_path = "info.txt"
exists = os.path.exists(file_path)
if exists:
# 1.打开文件
file_object = open('info.txt', mode='rt', encoding='utf-8')
# 2.读取文件内容,并赋值给data
data = file_object.read()
# 3.关闭文件
file_object.close()
print(data)
else:
print("文件不存在")
2. 写文件
2.1 写文本文件
file_object = open("t.txt", mode='wt', encoding='utf-8')
file_object.write("文本文件")
file_object.close()
2.2 写图片等非文本文件
f1 = open('a1.png',mode='rb')
content = f1.read()
f1.close()
f2 = open('a2.png',mode='wb')
f2.write(content)
f2.close()
注意:
- 文件不存在时,w模式会新建然后再写入内容;文件存在时,w模式会清空文件再写入内容
3. 文件打开模式
关于文件的打开模式常见应用有:
- 只读:
r
、rt
、rb
(用)- 存在,读
- 不存在,报错
- 只写:
w
、wt
、wb
(用)- 存在,清空再写
- 不存在,创建再写
- 只写:
x
、xt
、xb
- 存在,报错
- 不存在,创建再写。
- 只写:
a
、at
、ab
【尾部追加】(用)- 存在,尾部追加。
- 不存在,创建再写。
- 读写
- r+、rt+、rb+,默认光标位置:起始位置
- w+、wt+、wb+,默认光标位置:起始位置(清空文件)
- -x+、xt+、xb+,默认光标位置:起始位置(新文件)
- a+、at+、ab+,默认光标位置:末尾
4. 常见功能
- 读所有
f = open('info.txt', mode='r',encoding='utf-8')
data = f.read()
f.close()
- 读n个字符(字节)
f = open('info.txt', mode='r', encoding='utf-8')
data = f.read(1)# 读1个字符
f.close()
print(data)
- readline,读一行
f = open('info.txt', mode='r', encoding='utf-8')
v1 = f.readline()
print(v1)
v2 = f.readline()
print(v2)
f.close()
- readlines,读所有行,每行作为列表的一个元素
f = open('info.txt', mode='rb')
data_list = f.readlines()
f.close()
print(data_list)
- 循环,读大文件(readline加强版)
f = open('info.txt', mode='r', encoding='utf-8')
for line in f:
print(line.strip())
f.close()
- write,写
f = open('info.txt', mode='a',encoding='utf-8')
f.write("写文件")
f.close()
- flush,刷到硬盘
f = open('info.txt', mode='a',encoding='utf-8')
while True:
# 不是写到了硬盘,而是写在缓冲区,系统会将缓冲区的内容刷到硬盘。
f.write("刷到硬盘")
f.flush()
f.close()
- 移动光标位置(字节)
f = open('info.txt', mode='r+', encoding='utf-8')
# 移动到指定字节的位置
f.seek(3)
f.write("移动光标位置")
f.close()
注意:在a模式下,调用write在文件中写入内容时,永远只能将内容写入到尾部,不会写到光标的位置。
- 获取当前光标位置
f = open('info.txt', mode='r', encoding='utf-8')
p1 = f.tell()
print(p1) # 0
f.read(3) # 读3个字符 3*3=9字节
p2 = f.tell()
print(p2) # 9
f.close()
5. 上下文管理
之前对文件进行操作时,每次都要打开和关闭文件,比较繁琐且容易忘记关闭文件。如果不对文件进行关闭,会造成系统资源的浪费,以后再进行文件操作时,可以使用with上下文管理,它可以自动实现关闭文件。
with open("info.txt", mode='rb') as file_object:
data = file_object.read()
print(data)
文章参考视频:https://www.bilibili.com/video/BV1Uh411a7vM?spm_id_from=333.999.0.0