2020-12-25文件管理具体操作

python程序运行的三个步骤
1.先启动python解释器
2.python解释器将硬盘里的数据(文件代码)读到内存
3.用Python的语法去执行刚刚读入内存的代码文件

字符编码在python中的运用:步骤2、3运用的是字符串的功能,切记存取数据的时候必须用同种表,否则会出现乱码问题

在python3里,默认用的是utf-8读取文件只会将unicode格式的二进制数字转成字符,其余编码格式均不转换,存为二进制数字,故在python3中,永远无法查看Unicode格式的二进制,但可以在python2中可以看到,python2中用的是ASCII码,若想用Unicode格式的编码,可以在字符串前面加u如[u’你好’]
若想不乱码,还可以在文件头出注明文件写入的字符编码,如:encoding = ‘utf-8’
byte类型补充:字节类型的数据,在python3里默认为二进制数,不过因为二进制过长,底层会自动转成十六进制,在python中我们想得到其他编码格式的数据时可以采用:x = “上”
res = x.encode(“gbk”) #以gbk格式编码字符
print(res)
res.decode(“gbk”) #以gbk格式解码字符

文件处理:
文件处理的三种模式:

r #如果文件不存在则报错,文件存在则将文件指针跳至整个文件的开头(r模式理论上得到的是一堆二进制文件,配合t使用得到的就是字符串)
w #文件不存在则创建空文档,文件存在则清空,文件指针跳到文件开头
#文件关了,再打开就清空
#打开了文件不关的情况下,新写入的的内容永远跟在老内容之后
f.open(r"b.txt",mode=‘wt’,encoding=‘utf-8’)
f.write(“你好啊1\n”)
f.write(“你好啊2\n”)
f.write(“你好啊3\n”)
f.close()
a #文件不存在则创建空文档,文件存在则清空,文件指针跳到文件末尾
#打开了文件不关的情况下,新写入的的内容永远跟在老内容之后(此时与w模式一样)
#文件关了,再打开不会清空,只会追加

控制文件读写的模式:这两种模式与上面三种配合使用
t #读写的内容都是字符串类型,(1)只适用于文本文件,(2)必须要带encoding参数(不带就报错或乱码)
b # 读写的内容都是bytes类型的数据,一定不要带encoding参数,读取文本文件,需要手动转码
#可用于视频图片文件

读写模式:
r+t:在r的基础上加上它不具备的写功能,即读写功能,以读为主
w+t :在w的基础上加上它不具备的读功能,即读写功能,以写为主
a+t:在a的基础上加上它不具备的读功能,即读写功能,以写为主
正常业务中用不到读写模式,一般都用纯净模式,也就是只读只写模式

copy小工具:
with open(‘文件路径’,mode= ‘rb’)as f,open (r’文件路径’,mode= ‘wb’) as t:
for line in f:
t.write(line)

读写相关的方法
f.readline() #一次只读一行,
f.readlines() #一次全读完建立一个列表,将每行内容放景区,每一行就是一个元素,后面好取,但跟read一样,如果文件较大比较占内存空间
f.writelines() #将一个列表写进去文件,每一个元素写一次等于
l=[1,2,3]
for line in l:
f.write(line)

f.flush()催促操作系统直接写入,也就是写一次存一次降低了操作系统的效率
只有t模式下的read(n)代表的是字符个数,除此之外都代表字节个数
f.truncate()截断文件,阶段的是字节,注意中文汉字在utf-8编码表中对应三个字节
f.truancate(6)截断6个字节
f.close()关闭文件
f.name()查看文件名字

主动控制指针移动
f.seek(移动的字节个数,模式) #控制文件指针移动
其中模式有三种:
0:永远参照文件开头
1:参照当前位置
2:永远参照文件末尾(f.seek(-3,2))在文件末尾往前移三个字节
#注意:只有0模式可以在t下使用,1,2只能在b模式下使用
f.tell()当前指针距离文件开头几个字节

动态监测文件追加的内容:
import time
with open(‘access.log’,‘rb’) as f:
f.write("%s %s\n" %(time.strftime("%Y-%m-%d-%H:%M:%S"),‘你好’))
f.seek(0,2)
while True:
line = f.readline()
if len(line) ==0:
time.sleep(0.1)
else:
print(line.decode(‘utf-8’),end = ‘’)

硬盘里的数据(文件)永远都不能改,但内存(文件)可以改
修改文件方式一:
先将内容写到内存
再在内存中完成修改
将修改好的文件覆盖会原文件 (耗内存不耗硬盘)
with open(‘e.txt’,mode=“rt”,encoding= “utf-8”) as f:
data = f.read()
with open (“e.txt”,mode=“wt”,encoding=“utf-8”)as f:
f1.write((data.replace(‘egon’,“EGON”))

修改方式二:
1、已读的方式打开原文件,然后以写的模式打开一个临时文件
2、读原文件的一行内容到内存,然后在内存中修改完毕后在写入临时文件,循环往复知道直到改完
3、退出原文件,将临时文件重命名成原文件
(耗硬盘不耗内存)

import os
with open(‘e.txt’,mode=“rt”,encoding= “utf-8”) as f,with open (“e.txt”,mode=“wt”,encoding=“utf-8”)as f1:
for line in f:
f1.write((data.replace(‘EGON’,“egon”))
os.remove(“e.txt”)
os.rename(‘e.txt.swp’,‘e.txt’)

猜你喜欢

转载自blog.csdn.net/givenchy_yzl/article/details/111680127