标签:color \n 取出 写文件 trunc 打开 等于 文件名 open
文件的读写模式:
只读:r
只写:w
追加:a
读写模式:r+
写读模式:w+
追加读模式:a+
1、默认不写的话,就是只读模式
f=open(‘user.txt‘)
2、r模式打开一个不存在的文件,会报错
3、r模式打开文件后,不能进行写的操作
比如:
f=open(‘user.txt‘)
f.write(‘test‘) #会报错,提示不能进行写的操作
4、w模式下打开一个不存在的文件,会创建一个新文件
f=open(‘user1.txt‘,‘w‘) #会创建一个user1.txt的文件
f.write(‘test‘) #往文件中写入内容
5、w模式打开文件后,不能进行读的操作
f=open(‘user.txt‘,‘w‘)
f.read() #提示不能进行读的操作
6、w模式下打开一个存在的文件,会清空文件中的内容
f=open(‘user.txt‘,‘w‘) #会把文件中的内容进行清除
7、a模式下打开一个不存在的文件,会新建一个文件
f=open(‘user2.txt‘,‘a‘) #会新建一个user2.txt的文件
8、a模式打开文件后,不能进行读的操作
9、r+读写模式下打开文件,可以进行读的操作,也可以进行写的操作,打开不存在的文件,会报错
f=open(‘user.txt‘,‘r+‘) #以读写的模式打开一个存在的文件
f.read() #可以进行读的操作
f.write()#可以进行写的操作
10、w+写读模式打开文件,如果打开已存在的文件,会清空文件的内容,读的内容是空的
如果打开一个不存在的文件,会创建一个新的文件
f=open(‘user.txt‘,‘w+‘)
f.read() # 读到的内容是空的
11、a+模式打开文件,能读能写,但是读不到内容,因为文件指针在末尾
需要把指针移到开头,才能读到内容
f=open(‘user.txt‘,‘a+‘)
f.seek() #把指针移到开头
f.flush() #刷新缓冲区,立即写到磁盘上
f.read() #可以读到文件中的内容
12、read() 读取所有的内容,将文件内容放在一个字符串变量中
readline() 读取一行的内容
readlines() 读取文件里面所有的内容,把每行的内容放到一个list里面
13、如果文件中有中文,读写文件时,加上encoding=‘utf-8‘
14、用open打开文件时,每次打开后,使用完成后,必须在最后,关闭掉文件f.close()
比如:
f=open(‘test.txt‘)
f.read()
f.close()
每次使用完文件后,怕忘记关掉文件,就引入了with..open,无需另外进行关闭的操作
with open(‘user.txt‘) as f:
f.read()
.....
15、高效读取文件
直接循环f对象
with open(‘user.txt‘) as f:
for line in f:
print(f)
16、判断是否读到文件的末尾
#一行一行的读取,读到的值为空时,就结束循环
f=open(‘test2.txt‘,‘a+‘)
d={}
while True:#第一种,要求文件里面不能有空行
line=f.readline().strip()
if line:
user,password=line.split(‘,‘)
d[user]=password
else:
break
17、一行一行的往文件中写入内容
l=[‘1\n‘,‘ww\n‘]
f.writeline(l)#把list里面的每个元素都写进到文件中
18、修改文件
两种方式:
第一种:修改文件的内容,把原来的内容拿过来,进行替换,替换完成后,清空原有文件,再把新的文件内容写进去
with open(‘user.txt‘,‘a+‘,encoding=‘utf-8‘) as fw:
fw.seek(0) #指针定位到开头
reslut=fw.read() #读取所有的内容
new_result=result.replace(‘11‘,‘123456‘) #把11 替换成123456
fw.seek(0)
fw.truncate() #清空文件内容
fw.write(new_result) #把新文件内容写入到文件中
第二种方式:打开一个已存在的文件和不存在的文件,一行一行的读取出来,然后进行替换,替换完成后,再一行一行的写入到新的文件中,删除旧的文件,再重新命名新的文件为之前文件的名字
import os
with open(‘user.txt‘,encoding=‘utf-8‘) as fr,open(‘.user‘,‘a+‘,encoding=‘utf-8‘) as fw:
for line in fr:
new_line=line.replace(‘123456‘,‘12345678‘) #替换内容
fw.writelines(newline)
os.remove(‘user.txt‘) #删除文件
os.rename(‘.user‘,‘user.txt‘) # 重新命名成之前的文件名字
练习题:
文件内容:
#把文件里面,没有交作业的人名字后面加上没有交
# 已经交作业 ,加上交了
#1、读取文件
#2、按照空格分割每个人的作业信息
#3、分割文件后,判断长度是否等于2,如果有,就写入已交,没有就没有交
代码如下:
import os
with open(‘stu.txt‘,encoding=‘utf-8‘) as fr,open(‘.stu‘,‘w‘,encoding=‘utf-8‘) as fw:
for line in fr:
stu=line.split() #以空格分割
# print(stu)
if len(stu)>1:
stu[-1]=‘已交\n‘
# new_line=line.replace(‘1‘,‘已交作业\n‘)
else:
stu.append(‘未交作业\n‘)
fw.writelines(stu)
os.remove(‘stu.txt‘)
os.rename(‘.stu‘,‘stu.txt‘)
19、监控日志的练习题
#每分钟监控服务器日志,IP请求超过200次的,加入黑名单
#1、读文件,获取到每行的内容 open readlines
#2、找到IP地址,分割字符串,按照空格,取第一个元素,split
#3、把IP存在字典里面,每个IP出现一次,IP次数就加1
# 判断IP的出现的次数,200次{‘ip‘:1,‘ip2‘:2}
#4、判断IP次数是否大于200,大于200,就加入黑名单
代码如下:
import time
point=0
while True:
ips={} #存放IP的字典
f=open(‘access.log‘,encoding=‘utf-8‘) #打开文件
# f.readlines()
f.seek(point)
for line in f.readlines(): #循环获取每一行
ip=line.split()[0] #获取到ip
print(ip)
if ip not in ips: #如果字典中没有这个ip,就直接新增一个key,value,否则数量就+1
ips[ip]=1
else:
ips[ip]+=1
point=f.tell() #记录读完之后的文件值
for k ,count in ips.items():
if count>=200:
print(‘[%s]加入黑名单‘%ip)
time.sleep(60)
标签:color \n 取出 写文件 trunc 打开 等于 文件名 open
原文地址:https://www.cnblogs.com/qiuqiu64/p/10035538.html