文件的读写:
1 #对文件的操作分为三步:1.把冰箱门打开2.对冰箱里的东西操作3.把冰箱门关上 2 3 #1.打开文件两种方式: 4 myfile = open('myfirstfile.txt','a+',encoding='utf-8') 5 myfile.seek(0)#给出文件指针的位置 6 print(myfile.tell()) 7 print('firstline:',myfile.readline()) 8 print(myfile.tell()) 9 with open('mysecondfile.txt','a+',encoding='utf-8') as myfile2:10 myfile2.seek(0)11 print(myfile2.readlines())#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用12 myfile2.seek(0)13 print(myfile2.read())#读取文件中的所有内容14 myfile2.seek(0)15 for line in myfile2:16 print(line)#用于大文件读取line就是每行文件的内容,读完一行的话,就会释放一行的内存17 18 #修改文件:19 '''20 修改文件的话,有两种方式,21 一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;22 第二种是把修改后的文件内容写到一个新的文件中23 '''24 #第一种获取文件所有内容,更改文件,文件内容清空后,重写25 with open('文件更改方式一.txt','a+',encoding='utf-8') as myfile3:26 myfile3.seek(0)27 data = myfile3.read()28 Newdata = data.replace('123','a')29 myfile3.seek(0)30 myfile3.truncate()31 myfile3.write(Newdata)32 '''第二种方法:文件高效的处理方式 :33 1. 把文件的每一行拿出来处理34 2.写好一行就放到新的文件里3.删掉旧文件4.新文件改名字'''35 with open('words',encoding='utf-8') as fr ,open('newwords.txt','a+',encoding='utf-8') as fw:36 fr.seek(0)37 for line in fr:38 line = line.lstrip()39 if line:40 Newline = line.replace('寂寞','jimo')41 fw.write(Newline)
# #文件操作小练习# #要求1.以数字开头的就不要2.在每一行后面加上@163.com# import stringwith open('eamil.txt',encoding='utf-8') as fre,open('Newmail.txt','a+',encoding='utf-8') as fwe: for line in fre: if not line[0].isdigit(): Newline = line.strip() + '@163.com\n' fwe.write(Newline)
JSON 与文件
'''json 本质是字符串,但是长得像字典,内容还得是双引号括起来'''import jsonuser_info1 = '''{"sd":"12dsdfdrfs","af":"sdfsdfsd"}'''user_dic2 = json.loads(user_info1)#json 转字典print(user_dic2)>>>{ 'sd': '12dsdfdrfs', 'af': 'sdfsdfsd'}user_info2 = json.dumps(user_dic2)#字典转Jsonprint(user_info2)'''json 与文件:'''import jsonf = open('stu.txt')res = json.load(f)#这个是直接从文件里拿,不需要再读一次文件了,json帮你读print(res)stu_info = { 'laowang':{ 'cars':['BMW','Ben-z'] } }fw1 = open('stu1.json','w',encoding='utf-8')json.dump(stu_info,fw1,indent=4)#不需要咱们自己再write了,人家会帮你写入文件
Json 与文件的例子
1 '''用json实现用户注册''' 2 import json 3 f = open('users.txt', 'a+', encoding='utf-8') 4 f.seek(0) 5 user_info = json.load(f) 6 print(user_info) 7 for i in range(3): 8 uname = input('input your login:\n').strip() 9 pwd = input('input your pwd:\n').strip()10 cpwd = input('input your pwd again:\n').strip()11 if uname and pwd and cpwd:12 if uname in user_info:13 print('用户已存在,请换一个用户名')14 break15 elif pwd == cpwd:16 print('注册成功')17 user_info[uname] = pwd18 f.seek(0)19 f.truncate()20 json.dump(user_info,f)21 break22 else:23 '两次密码不一致'24 else:25 print('用户名密码不能为空~')26 else:27 print('三次机会用完')28 f.close()
练习:
#1、监控日志 # { '192.168.1.1':0,'192.158.1.1':2 } #[192,]# 1、如果一分钟之内某个ip访问超过100次# 2、就吧他的ip找出来,split,取第一个元素# 3、找出所有的ip,统计次数 #4、判断每个ip次数day100,就发邮件 #5、记录文件指针,给下次读的时候用 #6、等待60s,重新读取文件import timepoint = 0 #存放的是文件初始的位置while True: with open('access.log',encoding='utf-8') as f: f.seek(point) ip_info = {} #存放ip和他出现的次数 for line in f: ip = line.split()[0] if ip in ip_info: ip_info[ip] += 1 else: ip_info[ip] = 1 point = f.tell() #获取当前文件指针的位置 for k in ip_info: if ip_info.get(k)>=100: print('该ip在攻击你%s'%k) time.sleep(60)