文件操作模式
模式
r:只读
w:写
a:追加
r+: 读写
w+:写读
a+:追加写读
rb:只读字节
wb: 写字节
ab:追加字节
r+b:读写字节
w+b:写读字节
a+b:追加写读字节
常用的操作
1.光标(seek)
2.tell 查看光标当前位置
3.truncate 截断文件 删除后面全部内容
文件操作的函数
open(文件名(路径),mode="模式",encoding="字符集")
r w a 的使用
读文件
f=open('file.txt',mode='r',encoding='UTF-8')
s=f.read()
print(s)
f.close()
好好学习,天天向上
文件路径
1.绝对路径,从磁盘的根目录寻找 或者 从互联网上寻找
2.相对路径,相对于当前程序所在的文件夹
windowns的绝对路径文件读取 win是gbk
f=open("e:/abc/text.txt",mode='r',encoding='gbk')
s=f.read()
print(s)
f.close()
相对路径使用 ../上一层文件夹
f=open("../abc/test.txt",mode='r',encoding='utf-8')
s=f.read()
print(s)
f.close()
如果读取大文件的时候
f=open('测试文件',mode='r',encoding='utf-8')
for line in f: #文件时一个可迭代对象
print(line.strip()) #一行一行的处理数据
f.close()
写操作
带w的,只要你操作了,就会清空源文件,如果文件不存在,会自动创建文件
f=open('测试文件',mode='w',encoding='utf-8')
f.write('好好学习\n')
f.write('天天向上\n')
f.flush()
f.close()
追加模式
写的时候,换行需要手动控制 \n
f=open('测试文件',mode='a',encoding='utf-8')
f.write('好好学习\n')
f.write('天天向上')
f.flush()
f.close()
rb,wb,ab 的使用(处理的是非文本文件)
读取一张图片,然后写入e盘(相当于拷贝)
f=open("c:/tp.jpg",mode='rb') #这里不能写encoding
e=open("e:/tp.jpg",mode='wb')
for line in f: #从c盘读取
e.write(line) #写入e盘
f.close()
e.flush()
e.close
r+ b+ a+
**r+读写(不论你读取了多少内容,光标在哪儿,写入的时候都是在结尾写入),r+是最好用的 **
f=open('测试文件',mode='r+',encoding='utf-8')
s=f.read(3) #读取三个字符
print(s)
f.write('起飞了') #在末尾写
f.close()
w+ 还是会先空文件不建议使用,除非上来就写入,这时写入是在开头
略
a+追加写,需要把光标移动到最前头,才能读取,也很不好用
略
文件相关操作
光标移动到开头
f=open('文件测试',mode='r',encoding='utf-8')
for line in f: #读取到结尾
print(line.strip())
f.seek(0) #移动到开头
for line in f: #会在读取一边
print(line.strip())
f.close()
光标移动到某个位置
注意:移动的单位是byte 所以如果是UTF-8的中文部分要是3的倍数
seek讲解
移动到开头:seek(0)
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
f=open('文件测试',mode='r',encoding='utf-8')
s=f.read(1) #读取一个字符
f.seek(3) #3byte=>1个中文,3个英文
文件内容的替换
with自动关闭
import os #引入模块
with open('测试文件',mode='r',encoding='utf-8') as f1,\
open('测试文件_副本',mode='w',encoding='utf-8') as f2:
for line in f1:
line=line.replace('好好','不好好')#将好好替换成不好好
f2.write(line) #副本里写更改后的
os.remove('文件测试') #删除文件
os.rename('文件测试_副本','文件测试') #重命名
读取日志文件
文件内容
id,name,phone,car
1,sky,10086,特斯拉
2,天天,10010,五菱宏光
3,向上,10000,摩拜
4,学习,12345,小黄
lst=[]
with open('文件测试',mode='r',encoding='utf-8') as f:
first=f.readline().strip().split(',')
for line in f:
dic={} #每一行一个字典
ls=line.strip().split(',')
for i in range(len(first)):
dic[first[i]]=ls[i]
lst.append(dic)
print(lst)