1、文件操作
文件操作基本步骤:
1.打开文件;
2.操作文件;
3.关闭文件。
1.1 文件操作模式
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
x | 写入文件,没有文件则创建文件,如果有则报错。 |
xb | 以二进制形式写入文件,没有文件则创建文件,如果有则报错。 |
x/w/a + t | 以utf-8的编码格式进行读写操作。 |
1.2 读取文件
读取文件时要注意操作文件的位置
- 读取文本文件
file_txt = open("./示例文件/示例文本.txt", mode="r", encoding="utf8") # 以只读方式打开txt文件
data_txt = file_txt.read()
file_txt.close()
print(data_txt)
- 读取图片等非文本文件内容
file_jpg = open("./示例文件/人物.jpg", mode="rb") #
data_jpg = file_jpg.read()
file_jpg.close()
print(data_jpg)
1.3 写入文件
- 写入文本文件
# 覆盖写入
file_txt = open("./示例文件/作者.txt", mode="wb")
file_txt.write("justinc".encode("utf-8")) # 将字符串使用utf-8编码写入
file_txt.close()
file_txt = open("./示例文件/作者_.txt", mode="wt")
file_txt.write("justinc_") # 使用默认编码模式utf-8
file_txt.close()
# 追加写入
file_txt = open("./示例文件/作者.txt", mode="ab")
file_txt.write("123".encode("utf-8"))
file_txt.close()
- 写入图片等非文本文件
f1 = open("./示例文件/人物.jpg", mode="rb")
content = f1.read()
f1.close()
f2 = open("./示例文件/人物_.jpg", mode="wb")
f2.write(content)
f2.close()
- 读取文本并写入
f1 = open("./示例文件/作者.txt", mode="a+", encoding="utf-8")
data = f1.write("123123")
print(data) # 返回写入字符数
content = f1.read()
print(content) # 光标移动到最后,所以没有内容打印
f1.close()
1.4 常见功能
1.4.1 读取功能
-
read
- 读取所有字符/字节
file_txt = open("./示例文件/作者.txt", mode="r", encoding="utf8") data_txt = file_txt.read() file_txt.close() print(data_txt)
- 读取n个字符/字节
# 读取字符 file_txt = open("./示例文件/作者.txt", mode="r", encoding="utf8") data_txt = file_txt.read(1) file_txt.close() print(data_txt) # 读取字节 file_txt = open("./示例文件/作者.txt", mode="rb") data_txt = file_txt.read(1) file_txt.close() print(data_txt)
-
readline,读取第一行数据
f = open("./示例文件/示例文本.txt", mode="r", encoding="utf-8")
# 读取第一行数据如果在后面加上数字则读取前几个字符,如:f.readlines(3)代表读取前三个字符
content = f.readline()
print(content)
f.close()
- readlines,读取所有行的数据,并将每一行作为一个元素存入列表中
f = open("./示例文件/示例文本.txt", mode="r", encoding="utf-8")
content = f.readlines()
print(content)
f.close()
- 循环读取
# 使用readline方法读取前五行数据
f = open("./示例文件/示例文本.txt", mode="r", encoding="utf-8")
for i in range(5): # 读取前五行数据
content = f.readline()
print(content)
f.close()
# 循环读取,无需判断
f = open("./示例文件/示例文本.txt", mode="r", encoding="utf-8")
for line in f:
print(line.strip())
f.close()
1.4.2 写入功能
- flush,直接将内容刷入硬盘
file_txt = open("./示例文件/作者.txt", mode="a", encoding="utf-8")
file_txt.write("666")
file_txt.flush() # 直接刷入硬盘
file_txt.close()
- seek,将光标移动到指定字节
1、在a模式下,无论将光标移动到那里,总是默认在文件的尾部追加写入
2、若是中文则需要跳转的字节应该为3的倍数,否则会乱码
f = open("./示例文件/作者.txt", mode="r+", encoding="utf-8")
f.seek(7)
f.write("_")
f.close()
- tell,获取当前光标位置
f = open("./示例文件/示例文本.txt", mode="r", encoding="utf-8")
biao1 = f.tell()
print(biao1)
f.read(3) # 读取三个字符
biao2 = f.tell() # 当前光标在第九个字节的位置
print(biao2)
f.close()
1.4.3 上下文管理
with open("./示例文件/作者.txt", "r") as f1,open("./示例文件/作者_.txt", "r") as f2:
context1 = f1.read()
context2 = f2.read()
print(context1, context2, sep="")