文件操作
文件操作概念: 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文 件句柄. 然后通过文件句柄就可以进行各种各样的操作了. 根据打开方式的不同能够执行的操 作 也会有相应的差异.
文件操作方式: r , w , a , r+ , w+ , a+ , rb , wb , ab , r+b , w+b , a+b (默认使用r打开)
文件操作 r (只读) 只能进行读取操作 read(n) n只能为数字,表示读取到第几个位置,n为几,读取位置就截止到第几个字符
1 f = open('info', 'r', encoding='utf-8') 2 # s = f.read() # 读取全部内容 3 s = f.read(3) # 默认从头开始读取,读取到第三个位置 , 如果再次读取,会从当前位置(光标处)开始读取 4 f.close() 5 print(s)
文件操作 w (写入) 只要用w写入内容,文件原本的内容就会全部删除
1 f = open('info', 'w', encoding='utf-8') 2 f.write('影流之主 劫') 3 f.flush() 4 f.close()
文件操作 a (追加) 可以在不该原文件内容的情况下添加新的内容
1 f = open('info', 'a', encoding='utf-8') 2 f.write('\n九尾妖狐 阿狸') 3 f.flush() 4 f.close()
文件操作 r+ (读写) 打开文件可以进行读取和写入的操作 注意:如果先进行写入的操作,那么读取时只能读取到写入之后的内容
1 f = open('info', 'r+', encoding='utf-8') 2 f.write('\n熔岩巨兽 墨菲特') # 如果先写再读,写入的内容会从开头开始覆盖,写入多少内容就会覆盖多少内容,然后光标会停在写入内容结束的位置 3 s = f.read() # 写入之后读取,会从光标处开始读取剩余的全部内容 所以正确的顺序应该是先读取再写入 4 f.flush() 5 f.close() 6 print(s)
1 # 先读取再写入 2 f = open('info', 'r+', encoding='utf-8') 3 s = f.read() # 先读取文件全部内容,光标会停留在最后 4 print(s) 5 f.write("\n熔岩巨兽 墨菲特") # 然后在光标处添加内容 6 f.flush() 7 f.close()
文件操作 w+ (写读) 先将原文件的内容清空,然后写入内容,最后再读取内容,但是读取是读不到内容的(不常用)
1 f = open('info', 'w+', encoding='utf-8') 2 f.write('诺克萨斯之手 德莱厄斯') # 清空文件,添加内容 3 s = f.read() # 读取文件,但是读取的内容为空 4 f.flush() 5 f.close() 6 print(s)
文件操作 rb (只读 非文本格式使用) 读取出来的数据是bytes类型, 在rb模式下. 不能选择encoding字符集.
1 f = open('info', 'rb') 2 s = f.read() # 读取的内容直接就是字节 3 print(s) 4 f.close()
文件操作 readline() 逐行读取,将文件内容一行一行的显示出来,(会出现换行,可用 strip()来去除空格,换行符和制表符)
1 f = open('info', 'r', encoding='utf-8') 2 s = f.readline().strip() 3 s1 = f.readline().strip() 4 s2 = f.readline().strip() 5 print(s) 6 print(s1) 7 print(s2) 8 f.close()
文件操作 readlines() 将每一个行形成一个元素,放到一个列表中,将所有内容都读取出来(不常用)
1 f = open('info', 'r', encoding='utf-8') 2 s = f.readlines() 3 print(s) 4 f.close()
文件操作 seek() seek(n) n是光标的位置,n的单位是字节(byte) utf-8编码下,一个汉字等于3个字节
seek() 使用方式:
seek(0) 移动光标到开头位置
seek(0,2) 移动光标到结尾位置
1 f = open("⼩小娃娃", mode="r+", encoding="utf-8") 2 f.seek(0) # 光标移动到开头 3 content = f.read() # 读取内容, 此时光标移动到结尾 4 print(content) 5 6 f.seek(0) # 再次将光标移动到开头 7 f.seek(0, 2) # 将光标移动到结尾 8 content2 = f.read() # 读取内容. 什什么都没有 9 print(content2) 10 11 f.seek(0) # 移动到开头 12 f.write("张国荣") # 写⼊入信息. 此时光标在9 中⽂文3 * 3个 = 9 13 f.flush() 14 f.close()
文件修改: 创建新文件. 把修改后的内容写入新文件. 删除老文件. 重命名新文件
1 import os 2 3 with open("吃的", mode="r", encoding="utf-8") as f1, \ 4 open("吃的_副本", mode="w", encoding="utf-8") as f2: 5 for line in f1: 6 s = line.replace("菜", "肉") 7 f2.write(s) 8 9 os.remove("吃的") # 删除文件 10 os.rename("吃的_副本", "吃的") # 重命名文件