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

 

posted @ 2018-09-18 14:19  小黄同学。  阅读(59)  评论(0)    收藏  举报