操作文件

一、对文件的操作分为三步:

1、打开文件获取文件的句柄,句柄就理解为这个文件

2、通过文件句柄操作文件

3、关闭文件

现有文件words

 

读模式r   写模式w  追加模式a

读写模式r+  写读模式w+  追加读模式a+ 

读模式 r

f = open('words','r',encoding='utf-8')   #r  读模式 
# print(f.read())  #读文件
# print(f.readline())   #读一行
# print(f.readlines())  #把文件的每一行放在一个list里面  ['今天有点凉快\n', '昨天非常的热\n', '123456\n', 'be careful']
f.write('hhhhh')  #写入   报错
#读模式
#1  不能写
#2  文件不存在的话会报错

写模式  w

f = open('words','w',encoding='utf-8')   #写模式  
f.write('hhhhh')     #打开一个存在的文件写内容,原来的内容被覆盖
f = open('names','w',encoding='utf-8')   #写模式
f.write(‘hhhhh’)    #打开一个不存在的文件,会新建一个文件,往里面写内容
print(f.read())  #读文件  报错

写模式
1 打开一个存在的文件写内容,会清空原来文件的内容,写入新的内容
2 打开一个不存在的文件,会新建一个文件,往里面写内容
3 不能读
追加模式 a

f = open('words','a',encoding='utf-8') f.write('hhhhh') #打开一个存在的文件写内容,不会清空原来的内容,在末尾添加 f = open('names','w',encoding='utf-8') #文件不存在的话,新建一个文件 print(f.read()) #读文件 报错 追加模式 a 1打开一个存在的文件写内容,不会清空原来的内容,在末尾添加 2 打开一个不存在的文件,会新建一个文件,往里面写内容 3 不能读

读写模式r+

f = open('words','r+',encoding='utf-8')
f = open('word','r+',encoding='utf-8')   #文件不存在,会报错
print(f.read())  #读文件
f.write('hhhhh')  #写入  覆盖原来内容

写读模式w+

f = open('words','w+',encoding='utf-8')  
f = open('word','w+',encoding='utf-8')  #文件不存在,新建一个文件,可以写入
print(f.read())  #读文件,不能读
f.write('hhhhh')  #写入  文件存在,清空原来的内容,写新内容

追加读模式a+

f = open('words','a+',encoding='utf-8')
f = open('word','a+',encoding='utf-8')
print(f.read())  #读不到文件
f.write('hhhhh')  #写入

 综上只要沾上r,文件不存在就会报错;只要沾上w,都会清空原来的内容;所以友好的方式是a+

 

文件指针

是用来记录文件到底读到哪里了,f.seek(0) 移动文件指针到最前面

f = open('words',encoding='utf-8')
print(f.read())
print(f.readline())    #读不到东西,因为readline已经将文件指针指向文件末尾了
f = open('words','a+',encoding='utf-8')
print('read读的',f.read())   ##读不到东西,因为a+模式指针默认指向文件末尾
f.write('这是我写的')   ##在文件末尾写入,可以写入
f = open('words','a+',encoding='utf-8')
f.seek(0)
print('read读的',f.read())   ##加入seek(0)后可以读到
f.write('这是我写的')   ##在文件末尾写入  
#a+ 文件不存在可以创建一个文件,文件存在,在末尾添加内容,通过引用文件指针,可读可写。

with的使用 

在操作文件的时候,经常忘了关闭文件,这样的就可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件

with open('words','a+',encoding='utf-8') as f:
    for line in f:
        print(line)

 

文件操作小练习,产生一批手机号码

#读写文件小练习   随机生成一批手机号
import random
#print(random.randint(1,1000))   #随机产生1-1000的数字
# 手机号前面7位固定 1373806   (0001-9999)
#print('22'.zfill(4))    #补0   0022
#1.随机产生一些手机号
#2.写到文件里
f = open('phone.txt','w')
num = input('请输入你要产生的手机号个数:')
for i in range(int(num)):    #产生的数字是str类型,转换成int
    start = '1373806'
    random_num = str(random.randint(1,9999))
    new_num = random_num.zfill(4)   #补0  是字符串方法
    phone_num = start + new_num
    f.write(phone_num+'\n')
f.close()

1分钟 监控日志,加入黑名单

#监控日志,如果有攻击的,就把ip加入黑名单
#分析
 #1,打开日志文件
 #2,把ip地址拿出来   split
 #3 判断每一个ip出现的次数,如果大于50次的话,加入黑名单
 #  4 每分钟读一次

import time
point=0   #每次记录文件指针的位置
while True:
    all_ips = []   #存放所有ip地址
    f = open(r'C:\Users\meng\Desktop\access.log',encoding='utf-8')
    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)>50:
            print('攻击的ip是%s'%ip)
    f.close()
    time.sleep(60)  #暂停60秒

 

 

posted @ 2018-04-13 20:55  xiaomeng15  阅读(150)  评论(0编辑  收藏  举报