打开文件
- 文件路径:相对路径 : 1-读文件.py 绝对路径 : C:\Users\xlg\Desktop\文件操作\1-读文件.py
- r :以只读的方式打开文件,文件描述符放在文件的开头位置
- rb : 以二进制格式打开文件,文件只读,文件描述符放在文件的开头位置
- w:以只写的方式打开文件,如果文件存在,那么覆盖该文件,如果文件不存在,则会创建文件。
- wb:以二进制格式打开文件,文件用于写入,如果文件存在,那么覆盖该文件。
- w+:以读写的方式打开文件
- a:打开一个文件用于追加写入,如果文件不存在,则会创建文件;如果文件存在,则会在文件末尾写入内容。
- a+:以读写的方式打开文件
- encoding:文件的编码格式
errors:错误处理
strict:默认方式,如果遇到非法字符,抛出异常
ignore:忽略非法字符
replace:用?代替非法字符
open:返回值:文件描述符
打开普通文件
f1 = open("file.txt","r", encoding="utf-8")
# 当文件不存在,抛出异常
# FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'
# 打开二进制格式的文件:不能设置encoding
f2 = open("file.txt", "rb")
# 指定错误处理方式
f3 = open("file.txt", mode="r", encoding="utf-8", errors="ignore")
读取文件
# 读取文件所有内容
str1 = f1.read()
# 读取指定字符个数
str2 = f1.read(4)
# 读取整行 包括\n size代表字符个数 中文也算一个
str3 = f1.readline(size)
# 读取所有行,返回一个列表
str4 = f1.readlines()
#如果给定的size数字大于0,实际返回的size字符数会比写入的size大,原因需要填充缓冲区
# 修改描述符的位置 seek()
# tell() 返回描述符的位置
print(f1.read(3))
print(f1.tell()) # 3
f1.seek(3)
print(f1.read(3)) # 打印第四个到第六个字符
关闭文件
f1.close() # 必须关闭
try:
f2 = open("file.txt", "r", encoding="utf-8")
print(f2.read())
except FileNotFoundError as e:
print("文件没有找到")
finally:
if f2:
f2.close()
# 简洁的方式:
with open("file.txt", "r", encoding="utf-8") as f5:
print(f5.read())
写入文件
with open("c.txt","w", encoding="utf-8") as f2:
f2.write("124789kfxfh")
编码与解码
# 编码 encode("编码格式")
with open("d.txt","wb") as f1:
str1 = "北京你好,我有沙尘暴,hello world"
f1.write(str1.encode("GBK"))
# 解码 decode("编码格式")
with open("d.txt","rb") as f2:
data = f2.read()
print(data)
print(type(data)) # byte 字节
newStr =data.decode("GBK")
print(newStr)
print(type(newStr)) # str
存储操作
有时候,我们需要将某些字符串、列表、字典、元组等数据长久保存,现在,这个时候,就需要使用永久性存储的模块文件pickle。pickle模块可以将对象转换为一种可以存储或读取的格式。
pickle:该模块实现了数据的序列化与反序列化,通过pickle的序列化操作,可以实现将程序中的对象保存到文件信息中,实现永久性存储。
通过pickle的反序列化操作,可以实现将程序中的永久性存储的对象解析出来。
list1 = [1,2,3,4,5,6]
f1 = open("list.data", "wb")
# 将列表信息保存到文件中
# pickle.dump(即将存储的数据对象, 存入的文件) 序列化操作
# 建议:保存对象时,文件的后缀名不要使用电脑系统能够打开的格式
pickle.dump(list1, f1)
f1.close()
# 读取文件
tmp = []
# 打开文件
f2 = open("list.data", "rb")
# pickle.load(读取的文件) 有返回值
tmp = pickle.load(f2)
print(tmp)
f2.close()