python使用笔记003-文件操作(一)
文件操作分为:
1、打开文件,如果文件在当前目录下直接写文件名,如果文件在其他目录下写绝对路径
2、读/写文件
3、关闭文件
一、文件打开模式
# 'r':只读,文件读取后,会有文件指针记录读取文件的行数
# 'w':只写,会把以前的内容清空掉,建议写新文件时,使用w模式
# 'a':只追加
# 'r+' == r+w(可读可写,文件若不存在就报错(IOError))
# 'w+' == w+r(可读可写,文件若不存在就创建)
# 'a+' ==a+r(可追加可写,文件若不存在就创建)
# 对应的,如果是二进制文件,就都加一个b就好啦:
# 'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
二、读文件
1 f = open('a.txt','r',encoding='utf-8')#打开模式r w a 2 result1 = f.readline()#读文件,一次只读一行 3 print(result1) 4 result = f.read()#读文件,获取文件里的全部内容 5 result2 = f.readlines()#读文件,把文件里的内容放到一个list里,每一行是一个元素 6 #f.read(),f.readlines()这两个方法当文件很大时,会占用很大的内存 7 print(result2) 8 #处理大文件的时候,循环读取 9 for line in f: 10 print(line) 11 f.close()#关闭文件
三、写文件
1 f1 = open('a1.txt','w',encoding='utf-8')#打卡模式r w a 2 f1.write('12')#这个是一次写一行 3 #print(f.read()) 4 l = ['fdslfjs\n','fdsrewr\n','fdsfsdfrere\n'] 5 f1.writelines(l)#将列表写到文件中 6 #循环写入 7 for i in l: 8 f.write(i) 9 f1.close()
四、监控日志小练习
1 #1、监控,一直在运行,死循环,每分钟读一次文件 2 #2、第一次运行,读取文件所有的内容,从文件内容里获取到IP地址,及每个IP地址出现的次数 3 #3、判断每个IP地址出现的次数,如果大于大于50次,那么发短信告警 4 #4、等待60秒,继续重复上面的操作,读文件,获取内容 5 import time 6 point = 0#最前面 7 while True: 8 ip_list = {} #ip:ipcount 9 f = open('access.log', encoding='utf-8') 10 f.seek(point)#移动文件指针到哪个位置 11 for line in f: 12 ipStr = line.split()[0] 13 if ipStr not in ip_list: 14 ip_list[ipStr] = 1#不存在则加入统计 15 else: 16 ip_list[ipStr] += 1#存在则修改统计次数 17 point = f.tell()#当前文件指针的位置 18 f.close() 19 for ip in ip_list: 20 ipCount = ip_list.get(ip)#获取IP的统计次数 21 if(ipCount >= 50): 22 print('请求次数超过5次的IP:%s,请求次数为:%s'%(ip,ipCount)) 23 24 time.sleep(60)
五、排序小练习
1 #根据每个人跑步的公里数 重新排序每个人的排名,格式 1. 毛多锁 500km 2 #1、打开文件 3 #2、将文件的内容循环读取,存放到字典中 4 #3、给字典排序 5 #4、将排序好的字典写到一个新的文件中 6 7 run_scores = {} 8 f = open('数据.txt',encoding='utf-8') 9 for userinfo in f: 10 temp1 = userinfo.split()#用空格分割,将名字和跑步公里数分割 11 run_scores[temp1[1]] = float(temp1[2])#将文件中的内容放入字典中 12 13 f.close()#关闭文件 14 print(run_scores) 15 #将字典进行降序排序 16 run_scores_sort = dict(sorted(run_scores.items(), key=lambda x: x[1],reverse=True)) 17 print(run_scores_sort) 18 new_file = open('排序.txt','w',encoding='utf-8')#打开一个新的文件,用来存放排序后的内容 19 count = 0#定义编号 20 for temp2 in run_scores_sort:#遍历排序后的字典 21 count += 1 22 runScore = run_scores_sort[temp2]#获取跑步总公里数 23 result = '%d. %s %.2fkm\n' % (count,temp2,runScore) 24 print(result) 25 new_file.write(result)#将排序后的结果写入新的文件 26 27 new_file.close()
执行结果如图所示:
六、注册小练习
1 #注册用户,注册的逻辑和以前一样,注册成功的用户写到users.txt里面,写的数据格式和文件里面的一样 2 #1、输入注册的账号 3 #2、注册的账号不能为空 4 #3、注册的账号不能存在于users.txt文件中 5 #4、注册的密码,确认密码不能为空 6 #5、密码与确认密码一致,才能注册成功 7 #6、将注册的账号,密码追加到users.txt文件中 8 f = open(r'users.txt', 'r', encoding='utf-8') # 将打开文件模式定义为r:只读 9 results = f.readlines()#将文件内容读取到list中 10 f.close() # 关闭文件 11 for i in range(3): 12 checkUser = False#定义一个检查用户是否存在的flag 13 username = input('请输入注册的账号:').strip()#获取输入的账号 14 if username:#注册账号不为空,则继续验证 15 for line in results:#循环读取文件,检查注册账号是否存在 16 userinfo = line.split(',')#分割 17 if username == userinfo[0]: 18 checkUser = True 19 print('输入的账号已存在!!!') 20 21 if not checkUser:#当用户不存在时,进行注册 22 password = input('请输入注册的密码:').strip() # 获取输入的密码 23 rePassword = input('请输入确认密码:').strip() # 获取输入的确认密码 24 if password and rePassword: 25 if password == rePassword: 26 print('恭喜你,注册成功!') 27 new_file = open(r'users.txt', 'a', encoding='utf-8') # 将打开文件模式定义为a:可追加 28 tempResult = '%s,%s\n' % (username, password) 29 print(tempResult) 30 new_file.write(tempResult) 31 new_file.close() # 关闭文件 32 break 33 else: 34 print('两次输入的密码不一致!') 35 else: 36 print('密码/确认密码不能为空') 37 else: 38 print('输入的账号不能为空') 39 40 else: 41 print('错误次数已达上限!')