文件打开方式(mode):
r , rb(二进制) 只读(rb在读取非文本文件的时候,比如读取MP3,图像,视频等信息的时候)
w , wb(二进制) 只写
a , ab(二进制) 追加
r+ 读写 该模式下,必须是先读取,让后再写入,默认光标是在开头的,准备读取再写入,r+模式下读取内容,无论读取多少,光标显示的多少,在写入或者操作文件的时候都是在结尾进行的操作
w+,w+b 读写 先将所有内容清空.然后写入最后读取,一开始读不到数据
a+ 写读(追加写读) a+模式下,不论先读还是后读,都读不到数据
绝对路径和相对路径:
1.绝对路径 : 从磁盘根目录开始一直到文件名.
2.相对路径 : 同一个文件夹下的文件.相对路径可以直接使用文件名.如果是上一层文件夹.则要../
(推荐使用相对路径,方便传输项目文件给其他人)
文件操作实例:
文件读取
f = open("../def/哇擦.txt", mode="r", encoding="utf-8") #1 将文件全部读取出来 content = f.read() #弊端占用内存过大,文件过大容易崩溃 #2 读取n个字符 content = f.read(3) #如果是rb,则读取的是n个字节 content2 = f.read(3) #再读3个字节 #二进制读取 f = open("../def/哇擦.txt", mode="rb") content = f.read(3) #结果b'\xe5\x8f\x8b'
f = open("../def/哇擦.txt", mode="r", encoding="utf-8") content = f.readline() .strip() # 一次读取一行数据 f = open("../def/哇擦.txt", mode="r", encoding="utf-8") lst = f.readlines() #每行形成一个元素,放到一个列表中,所有内容都读取出来 for line in f: print(line.strip()) # 循环读取,不会产生内存溢出,推荐使用
f.flush() f.close() #文件读取之后文件句柄f一定关闭
文件写入
f = open("a1.txt", mode="a", encoding="utf-8") f.write("apple") #追加写入 f.flush() f.close()
其他操作
1. seek(n) 光标移动到n位置,移动单位是byte.utf-8的中文部分要是3的倍数
移动到开头 : seek(0)
移动到结尾 : seek(0,2)
2. tell() 获取光标的当前位置
3.truncate() 截断文件
修改文件
1 import os 2 with open("a2.txt", mode="r", encoding="utf-8") as f1,\ 3 open("a2_new.txt", mode="w", encoding="UTF-8") as f2: 4 for line in f1: 5 new_line = line.replace("apple", "pear") 6 f2.write(new_line) 7 os.remove("a2.txt") # 删除源⽂件 8 os.rename("a2_new.txt", "a2.txt") # 重命名新⽂件