1.文件操作
我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了。
f = open('t2',mode='r',encoding='utf-8')
open() 打开, 第一个内容是文件的名字(必须是字符串)
mode= 第二个内容是咱们对这个文件的操作方式
encoding= 第三个内容是咱们这个文件的编码集
f 文件句柄所有对文件的操作都是操作文件句柄
打开文件的方式:
r,w,a
r+,w+,a+
rb,wb,ab
r+b,w+b,a+b
默认使用的是r(只读模式)
2.只读
r 只读
f = open('t2',mode='r',encoding='utf-8') content = f.read() #读 一次性全部读取
content1 = f.readline() # 读取一行,但是有个 换行
content = f.readlines() # readlines 读取一行一行的,存放在列表里 print(content)
rb 读取bytes类型:
rb 读出来的数据是bytes类型,在rb模式下,不能encoding字符集(rb,wb,ab模式同样适用)
rb的作用:在读取非文本文件的时候,比如要读取mp3,图像,视频等信息的时候就需要用
到rb,因为这种数据是没办法直接显示出来的。
f = open('C:\Users\oldboy\Desktop\QQ.jpg',mode='rb') # r 和 \ 一样都是转义 # rb读取字节
绝对路径:从磁盘根目录开始查找
相对路径:相对于某个东西来查找就是相对路径
f = open('QQ.jpg',mode='rb') # 相对路径 print(f.read())
3.覆盖写
w 模式:只有写没有读的功能。
f = open('t2.txt',mode='w',encoding='utf-8') f.write('在网上也是这样。') f.write('人生三个爽') #w模式 如果文件不存在就新建一个 #覆盖写,写之前先把文件清空
wb 模式:wb模式下,不可以指定打开文件的编辑,但是写文件的时候必须将字符串转换
成utf-8的bytes数据。
f = open('../path1/小娃娃.txt',mode='wb') msg = '你好'.encode('utf-8') f.write(msg) f.flush() # 刷新 在写文件的时候我们要养成一个写完文件就刷新的习惯. 刷新flush() f.close()
a 模式:追加
只要是a或者ab,a+都是在文件的末尾写入,不论光标在任何位置.
在追加模式下,我们写入的内容后追加在文件的末尾。
f = open('t2',mode='a',encoding='utf-8') f.write('相对路径') # 文件最后添加内容
4.读写,写读,追加读
r+ 读写模式
读写模式,必须是先读后写,因为光标默认在开头位置,当读完了以后再进行写入.
f1 = open('../path1/小娃娃.txt',mode='r+',encoding='utf-8') msg = f1.read() f1.write('这支烟灭了以后') f1.flush() f1.close() print(msg) #结果:正常的读取之后,写在结尾
注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入
或者操作文件的时候都是在结尾进行的操作.
w+ 写读模式
先将所有的内容清空,然后写入.最后读取.但是读取的内容是空的,除非移动光标,不常用。
f = open('t2',mode='w+',encoding='utf-8') f.write('老子今天上班了') f.seek(0) # 移动文件光标 print(f.read())
a+ 追加读
a+模式下,不论是先读还是后读,都是读不到数据的,除非移动光标。
f = open('t2',mode='a+',encoding='utf-8') f.seek(0) print(f.read()) f.write('哈哈哈')
5.文件其他操作
seek() 移动光标
通常我们使用seek都是移动到开头或者结尾
移动到开头:seek(0) 实际是seek(0,0)
当前位置:seek(0,1)
移动到结尾:seek(0,2)
注意: 移动单位是byte,如果是utf-8的中文部分要是3的倍数,如果是文字就移动一位,如果是英文就移动3位。
tell() 查看光标:光标是按照字节数的
truncate() 截取:内容是字节数,如果想做截断操作. 记住了. 要先挪动光标,挪动到你想要截断的位置,然后再进行截断。
with open('t2','rb')as f: print(f.read()) print(f.seek(0)) # 文件头部 print(f.read(1)) print(f.tell()) # 查看光标的位置 数的是字节
with open('t2','r+',encoding='utf-8')as f: f.truncate(9) # 3个字符 指定字节之后的门内容全部删除
6.文件名修改
import os 导入
os.rename() 重命名 第一个参数旧的名字,第二个是新的名字
os.remove() 删除这个文件
import os os.rename('t2','t3') with open('t3','r',encoding='utf-8')as f, open('t5','a',encoding='utf-8')as f1: msg = f.read() # 将源文件复制一份 msg = msg.replace('好','困') f1.write(msg)
import os os.remove('t3') # 删除原数据 os.rename('t5','t3') with open('t3',mode='r',encoding='utf-8')as f, open('t5',mode='a',encoding='utf-8')as f1: for i in f: i = i.strip().replace('父','爸爸') f1.write(i) print(f.readline().strip())
总结:
r 只读 不能写
read() 读取全部
模式是r的时候,read(3)就是读取3个字符
模式是rb的时候,read(3)就是读取3个字节
readline() 读取一行
readlines() 存放在一个列表中
w 只写 不能读
覆盖写,先清空文件的内容,在写
当文件不存在的时候,创建一个文件
a 追加写 不能读
写的内容一直都在文件的末尾
r+ 读写
错误示范 先写后读
正确的是 先读后写
w+ 写读
写读的时候是读不到内容的,除非移动光标
a+ 追加写 读
写读的时候是读不到内容的,除非移动光标
最常用: r,w,a,r+,a+
with open('t2',mode='w',encoding='utf-8')as f: #上下文管理 --- 面试题 msg = f.write('小强和刘申') print(msg) # 不用你自动关闭文件