python-文件读写
文件基本操作
打开文件:python3 里打开文件用 "open",python2 里用 “file” ,windows下一定要加“utf-8”
f = open('a',encoding='utf-8') #打开一个名为“a”的文件 print(f.read()) #读取该文件的全部内容 print(f.readline()) #读取文件的第一行内容 print(f.readlines()) #读取文件放到list里面
with open('a','a+') as f #自动关闭文件
‘r’ 读模式:不可以写,文件不存在的话会报错
‘w’ 写模式:文件不存在时,会新建文件;文件已存在时,会清空之前的文件内容;不能读
‘a’ 追加模式:文件不存在时,会新建文件;文件已存在时,不会清空之前的文件,会在末尾追加;不能读
‘r+’ 读写模式:文件不存在会报错
‘w+’ 写读模式:文件已存在时,会清空之前的文件内容
‘a+’ 追加读模式:文件不存在时,会新建文件;文件已存在时,不会清空之前的文件,会在末尾追加
文件指针:用来记录文件读到哪里了
f = open('a','a+',encoding='utf-8') f.seek(0) #移动文件指针到最前面 f.write('嘻嘻嘻') print(f.read())
移动完文件指针之后,是只能读,写的时候还是在文件末尾写
fw = open('username','w') #打开一个名为‘username’的文件 fw.write('hhhh') #写入‘hhhh’ fw.flush() #强制把缓冲区里面的数据写到磁盘上
修改文件:
文件名:username
文件内容:huang,123456;hong,123456;
把123456改为78910(打开username文件,read获取到所有内容,replace替换内容,truncate清空文件内容,write把内容写进去):
f=open('username','a+',encoding='UTF-8') f.seek(0) all_str=f.read() #获取到所有的内容 new_str=all_str.replace('123456','78910') #对文件进行修改,replace:替换字符串 f.seek(0) f.truncate() #清空文件内容 f.write(new_str) f.close()
文件内容每行前面加‘syz_’
f=open('username','a+',encoding='UTF-8') f.seek(0) all_str='' for s in f: new_s='syz_'+s all_str+=new_s f.seek(0) f.truncate() #清空文件内容 f.write(all_str) f.close()
小练习:
- 随机生成一组手机号,存到文件中
import random f = open('names','w',encoding='utf-8') num = input('请输入你要产生的手机号个数:') for i in range(int(num)): start = '1521052' random_num = str(random.randint(1,9999)) #随机产生一个数字 new_num = random_num.zfill(4) #自动补齐至4位数 phone_num = start + new_num f.write(phone_num+'\n') f.close()
- 监控日志,如果被攻击,把IP加入黑名单
打开日志文件
把IP地址取出来
判断每一个IP出现的次数,大于100次加入黑名单
每分钟读一次
import time point = 0 #记录文件指针的位置 while True: #死循环 all_ips = [] #存放所有的ip f = open('access.log',encoding='utf-8') #f表示文件句柄或文件对象 f.seek(point) for line in f: #直接循环一个文件对象时,每次循环的是文件的每一行 ip = line.split()[0] all_ips.append(ip) point = f.tell() #记录文件指针的位置 all_ip_set = set(all_ips) for ip in all_ip_set: if all_ips.count(ip)>100: print(ip) time.sleep(60) #暂停60s

浙公网安备 33010602011771号