一、文件操作
保存到内存里,关闭就清除;若需要持久化保存,需保存到磁盘里
对文件的操作分三步:
1)打开文件
2)操作文件
3)关闭文件
1 # f = open('文件名', '打开模式', 字符集) 2 # 文件名:当前路径写文件名,如果在其他路径,写绝对路径 3 # 打开模式:r只读模式,w只写模式,a追加模式 4 # 字符集:如果中文,需要些utf-8,否则 5 #文件指针:记录当前到第几行 6 7 8 # 读文件 9 f = open('文本.txt', 'r', encoding='utf-8') 10 result1 = f.readline()#读文件,一次只读取一行 11 result2 = f.read()#读文件,获取文件里面的全部内容 12 result3 = f.readlines()#读文件,读取文件里面的所有内容,返回的是一个list,每行的内容是list的一个元素 13 print('result1结果:', result1) 14 print('result2结果:', result2) 15 print('result3结果:', result3) 16 f.close()#关闭文件 17 18 19 # 处理大文件的时候: 20 # read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放 21 f = open('文本.txt', 'r', encoding='utf-8') 22 for line in f: #line就是每行文件的内容,读完一行的话,就会释放一行的内存 23 print(line) 24 25 26 # 写文件 27 f = open('文本.txt', 'w', encoding='utf-8') 28 f.write('123\n')#写文件,会把以前的内容清空掉。若不存在的文件,会创建新文件 29 f.close() 30 31 f = open('文本.txt', 'w', encoding='utf-8') 32 l = ['1234\n', '234\n'] 33 f.writelines(l)#写文件,可以传list,会把以前的内容清空掉 34 f.close() 35 36 f = open('文本.txt', 'w', encoding='utf-8') 37 l = ['1234\n', '234\n'] 38 for i in l: 39 f.write(i) 40 f.close()
文件操作小练习:
1 # 监控日志文件,IP超过50次报警 2 # 分析: 3 # 1.监控日志,一直运行,死循环,每分钟读一次文件 4 # 2.第一次运行,读取文件所有内容,从文件内容里面找到获取到IP地址,以及每个IP地址出现的次数 5 # 3.记住当前指针的位置,下次从这个位置开始读 6 # 4.判断每个IP出现的次数,如果大于50次,那么就发短信报警 7 # 5.等待60s,继续重复上面的操作,读文件,获取内容 8 9 import time 10 point = 0#定义point,0代表最前面的位置 11 while True:#死循环 12 f = open(r'C:\Users\zx\Desktop\access.log', encoding='utf-8')#只读模式r可以省略 13 f.seek(point)#移动指针到哪个位置 14 ip_list = {}#定义字典{'ip':2} 15 for line in f:#循环文件 16 ip = line.split()[0]#分割成list,取下标为0的元素 17 if ip not in ip_list: 18 ip_list[ip] = 1#第一次出现,次数=1 19 else: 20 ip_list[ip]+=1#不是第一次出现,出现次数+1 21 point = f.tell()#记住当前指针的位置 22 f.close()#关闭文件 23 for ip in ip_list:#如果ip在ip_list里 24 count = ip_list.get(ip)#找出ip对应的值 25 if count >= 50:#找到ip>50 26 print('ip地址【%s】有问题,请注意!' % ip) 27 time.sleep(60)#等待60s