python基础 文件读写/文件的操作方法/文件读写练习(监控日志)

2019/06/18 15:47
阅读数 79

 

python文件读写模式r r+ w w+ a a+的区别

模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错
w 只能写 创建
w+  可读可写 创建
a   只能写 创建 否,追加写
a+ 可读可写 创建 否,追加写
f=open('文件读写a','a+',encoding='utf-8')
f.seek(0)#移动指针到最前面
print(f.read())#读取文件所有内容,字符串
print(f.readline())#读取一行文件
print(f.readlines())#读取文件所有内容,返回的是list,每行的内容放到一个list里
f.close()
f.write('aaaa')
names=['liuyingx\n','lilei\n','xiaohong\n']
f.writelines(names)#传一个list,然后把list的每个元素写到文件中
f=open('笔记',encoding='utf-8')
#注册时校验用户是否存在,账号密码存到文件里
#login.py
#登陆的时候从里面存账号密码的文件里获取账号密码,
#验证账号密码是否存在
注册
f=open('users.txt','a+',encoding='utf-8')
f.seek(0)
user={}
for line in f:#直接循环文件对象,每次循环取一行文件内容
print(line.strip().split(','))
user[line.strip().split(',')[0]]=line.strip().split(',')[1]
print(user)
for i in range(3):
username = input('username:').strip()
password = input('password:').strip()
cpassword = input('cpassword:').strip()
if not username or not password or not cpassword:
print('username or password or cpassword不能为空')
elif password != cpassword:
print('密码和确认密码不一致')
elif username in user:
print(username+'已存在,请修改username')
else:
f.write('%s,%s\n' %(username,password))
print('恭喜您注册成功')
break
f.close()



登陆
f=open('users.txt',encoding='utf-8')
f.seek(0)
user={}
for line in f:#直接循环文件对象,每次循环取一行文件内容
print(line.strip().split(','))
user[line.strip().split(',')[0]]=line.strip().split(',')[1]
username=input('username:').strip()
password=input('password:').strip()
if not username or not password:
print('用户名或密码不能为空')
elif username not in user:
print('账号不存在,请先注册账号')
else:
if password==user[username]:
print('恭喜您登陆成功')
else:
print('对不起,密码输入错误,请从新输入')
f.close

fw = open('users.txt','w')
fw.write('aaa')
fw.flush()#把缓冲区里的数据立即写到磁盘上
with open('users.txt','a+',encoding='utf-8') as fw:#with,文件不用时自动关闭文件
fw.read()
fw.write('123')

文件修改
#方法1
#1先获取到文件所有内容
# 2然后修改内容
# 3清空原来文件的内容
# 4重新写入
f = open('users.txt','a+')
f.seek(0)
data=f.read()
data_new=data.replace('abc','python')
f.seek(0)
f.truncate()#清空文件内容
f.write(data_new)
f.flush()
f.close()
#方法2,高效的处理方式
# 1 先打开原来d文件,再打开一个空文件
# 2循环处理原料文件里面的每一行数据,处理完后写到新文件里
# 3把原来的文件删除,把新文件名称改成原文件名称

#需求:1把前面的空格去掉
# 2把空行去掉
# 3把你替换成you
import os
with open('file',encoding='utf-8')as fr,open('.file','w+',encoding='utf-8')as fw:
for line in fr:
line=line.lstrip()#去掉左边的空格
if line:#判断这一行是否有数据
line=line.replace('你','you')#把你替换成you
fw.write(line)#把修改好的内容写到新的文件中
os.remove('file')#删除原文件
os.rename('.file','file')#把新文件的名字改成原文件名称

 
文件的操作方法
open('file.txt','r+',encoding='utf-8')#encoding参数可以指定文件的编码
             f.readline()#读一行
            f.readable()#判断文件是否可读
            fr.writable()#判断文件是否可写
            fr.encoding#打印文件的编码
             f.read()#读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
             f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
             f.tell()#获取当前文件的指针指向
             f.seek(0)#把当前文件指针指向哪
             f.write('爱情证书')#写入内容
             f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中
             f.truncate()#清空文件内容
             f.writelines(['爱情证书','孙燕姿'])#将一个列表写入文件中
             f.close()关闭文件
#监控日志
# 1 在一分钟之内某个ip访问超过100次,找出此ip
#操作步骤
# 1打开文件
# 2获取每行数据,split分割,取第一个元素
# 3找到所有的ip并统计次数
# 4判断每个ip次数大于100,就发邮件
# 记录文件指针,给下一次读的时候用
# 等待60s,重新读取文件
import time
data={}
point=0
while True:
with open(r'G:\python_code\day4\access.log',encoding='utf-8')as fr:
fr.seek(point)
for line in fr:
k=line.split(' ')[0]
if k in data:
data[k]+=1
else:
data[k]=1
point=fr.tell()
for k in data:
if data.get(k)>100:
print(k)
fr.tell()
time.sleep(60)












展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部