Day4-文件,json字典文件互转,函数

文件的读写:

 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 string
with 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 json
user_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)#字典转Json
print(user_info2)




'''json 与文件:'''
import json
f = 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             break
15         elif pwd == cpwd:
16             print('注册成功')
17             user_info[uname] = pwd
18             f.seek(0)
19             f.truncate()
20             json.dump(user_info,f)
21             break
22         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 time
point = 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)

 

posted @ 2018-06-15 17:46  卖女孩的小大米  阅读(99)  评论(0编辑  收藏  举报