打开文件
- 文件路径:相对路径 : 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'# 打开二进制格式的文件:不能设置encodingf2 = 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()) # 3f1.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()