Python-⽂件读写及修改
⽂件的读写有三种形式:读、写和追加。
⼀、读模式 r 和读写模式 r+
1、读模式 r
读模式r特点:(1)只能读,不能写;(2)⽂件不存在时会报错。
(1)例:读取当前⽬录下的⽂件,该⽂件如下所⽰。
解析:
a、⽤open打开⽂件,在python3中只有open。python2可以⽤open和file。关闭⽂件是close()。⼀般有开就有关
b、如果在当前⽬录,可以直接写⽂件名,否则需添加路径。
c、如果不写 'r',即写成 f = open(''),也是默认读模式。
d、read可以将⽂件所有的内容都读出来
e、另外,有时需要添加解码格式 encoding ,格式为:
f = open('books','r',encoding='utf-8')
(2)
read:读取⽂件全部内容
readline:读取⼀⾏
readlines:读取每⼀⾏,并且放到⼀个list⾥
2、读写模式 r+
读写模式r+特点:(1)⽂件不存在时会报错;(2)可以读,也可以写,是覆盖写,会把⽂件最前⾯的内容覆盖
‘⽔浒传’把‘平凡的’三个字覆盖,原来的⽂件变为:
⼆、写模式 w 和写读模式 w+
1、写模式python怎么读的
写模式w特点:(1)只能写,不能读;(2)写的时候会把原来⽂件的内容清空;(3)当⽂件不存在时,会创建新⽂件。
如下,写⼊‘⽔浒传’时,将原来的内容都清空。
f.flush():有时我们⽤f.write()后,会发现没有写⼊⽂件,这是因为内容存在了缓冲区,需要等缓冲区满了之后,再把所有数据写⼊。此时可以⽤f.flush()强制把缓冲区⾥⾯的数据写到磁盘上。
2、写读模式 w+
写读模式w+特点:(1)可以写,也可以读;(2)写的时候会把原来⽂件的内容清空;(3)当⽂件不存在时,会创建新⽂件。
三、追加模式a和追加读模式a+
1、追加模式a
追加模式a特点:(1)不能读;(2)可以写,是追加写,即在原内容末尾添加新内容;(3)当⽂件不存在时,创建新⽂件。
将‘⽔浒传’添加到原内容的末尾
2、追加读a+模式
追加读a+模式特点:(1)可读可写;(2)写的时候是追加写,即在原内容末尾添加新内容;(3)当⽂件不存在时,创建新⽂件。
以上⼏种模式,可以⽤下表来总结:
读写模式是否可读是否可写⽂件不存在时
r是否报错
r+是是,覆盖写报错
w否是,清空原内容创建新⽂件
w+是是,清空原内容创建新⽂件
a否是,追加写创建新⽂件
a+是是,追加写创建新⽂件
四、⽂件指针
⽂件指针⽤来记录⽂件⾛到哪⾥。
⽂件指针是很重要的,我们看下⾯的例⼦中,read将的内容全部读了出来,readline则没有读出任何内容。原因是read读完之后,⽂件指针到了⽂件的末尾,此时readline接着从这个位置开始读,肯定是没内容的。因此有时需要调整⽂件指针的位置。
seek可以移动⽂件指针,移动后只是针对读,⽤追加模式写的时候,还是在末尾写。
另外,seek(num),这个num指的是字符,不是⾏。
在上⾯的代码中,加⼀句f.seek(0),即可将指针移到⽂件开头。这次,readline就可以从头开始读了。
五、⾃动关闭⽂件
with可以⾃动关闭⽂件,⽤法如下:
with open('','a+') as f:
f.write('\n三体')
六、⽂件修改
1、简单粗暴直接修改
最简单粗暴的修改⽂件,步骤是:
(1)打开⽂件,获取⽂件内容;
(2)对内容进⾏修改;
(3)清空原来⽂件的内容;
(4)把新的内容写进去。
这种⽅法很简单,下⾯看⼀个⼩例⼦----⽂件username⾥存放了姓名和密码,如下图格式。我们要在所有姓名前加上‘A班_’
因为'A班_'中含有中⽂,需要叫上encoding='utf-8',否则会出现乱码。
2、备份⽂件的⽅法
当⽂件很⼤时,刚刚的⽅法在⼀次性读取⽂件内容和写⼊新内容时,耗时长,占⽤磁盘空间也较⼤。
备份⽂件的⽅法可以建⽴⼀个备份⽂件,修改⼀⾏写⼀⾏,具体步骤如下:
(1)打开2个⽂件,原⽂件a和备份⽂件b。如a.txt b.txt.bak
(2)删除a⽂件,将b⽂件名改为a⽂件名
例:将⽂件words⾥的“花”改成“flower”
七、⼩练习
1、产⽣⼿机号前⼏位⼀样1861253 后四位随机,写到⽂件⾥。
分析:(1)⾸先要随机产⽣⼀些四位数,位数不⾜的要补0,zfill可以给字符串补0;
(2)需要写到⽂件⾥,可以⽤w或者a模式。⽂件有打开就要有关闭。
import random
f = open('','w')
num = int(input('请输⼊你要产⽣的⼿机号个数:'))
for i in range(num):
start = '1861253'
random_num = str(random.randint(1,9999))
new_num = random_num .zfill(4) #不够4位就补0,仅对字符串可以使⽤
phone_num = start + new_num
f.write(phone_num+'\n')
f.close()
2、监控服务器⽇志,如果ip出现的次数⼤于50次,就把该ip加⼊⿊名单。⽇志⽂件的格式如下图
分析:(1)⾸先,我们应该从⽇志⾥提取出所有ip。根据⽇志⽂件的格式,我们可以看到每⼀⾏的开头是ip,那么可以⼀⾏⼀⾏的读取数据,然后⽤空格进⾏分割,则该⾏第⼀个元素就是ip。(2)然后需要统计每⼀个ip出现的次数,最直接想到的就是count。(3)到出现次数⼤于50次的ip,打印出来。
import time
point = 0#记录⽂件指针的位置
while True:
f = open(r'D:\access.log',encoding='utf-8')
all_ips = []
f.seek(point)#移动⽂件指针,本次接着上次的位置继续读
for line in f:
ip = line.split()[0]#每⾏第⼀个元素为IP
all_ips.append(ip)#存放所有的ip,不去重
point = f.tell()# 获取⽂件当前指针位置
ips_set = set(all_ips)#去重
for i in ips_set:
if unt(i)>50:
print('应该加⼊⿊名单的ip是:%s\n'%i)
time.sleep(60)#暂停60s
运⾏结果为:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论