python非空怎么表示_Python(六)操作文件+非空即真

文件的基本操作

r:只读(默认),不能写,在打开文件时,r可以省略不写,打开不存在的文件会报错

1528783-20181125190414821-1378690983.png

w:只写模式,不可读:不存在的文件则会创建,存在的文件会清空文件内容

1528783-20181125191122462-288065710.png

a:追加模式,不可读:不存在的文件会创建,存在的文件会追加

1528783-20181125191650538-759387701.png

r+:可读,可写,。打开不存在的文件会报错

1528783-20181125192603633-159264818.png

w+:读写模式,已经存在的文件,内容会被清空,可以读到已经写得内容

1528783-20181126103747929-1190531715.png

a+:追加读写模式,不存在则创建,存在则只追加内容

1528783-20181125194355476-687249094.png

文件的操作方法

readlines():读取文件所有内容,把每行的内容放到一个list里面

1528783-20181125194731551-520421724.png

readline():读取文件里面第一行的内容

1528783-20181125195218806-25981675.png

read():读取文件的所有内容

seek():文件指针

1、当前文件指针指到哪,seek(0):指到文件的最前面

2、read与readlines文件指针到文件的最后一行;readline文件指针到第二行

1528783-20181125200413334-1871648876.png

write():写入内容,传的内容必须得是字符串

flush():写入文件后,刷新缓冲区,立即写到磁盘上.例如f.write()文件没有写入成功,那就就要用.flush方法,文件就会更新,即写入成功了

tell():获取当前文件的指针指向

truncate():清空文件内容

writelines():会循环list里面的每一个元素都写进文件里面去

高效读取文件

思路:直接循环文件对象,每次取得的就是文件里的每一行,直接使用for循环即可

1528783-20181125204757205-229520186.png

with使用方法

with:会在使用完这个文件之后,自动关闭文件,用法如下:

1528783-20181125205054455-875796254.png

修改文件

修改文件的话,有两种方式,一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;第二种是把修改后的文件内容写到一个新的文件中

第一种:

1528783-20181125205908475-797372835.png

第二种:

1528783-20181125205707394-1775041024.png

非空即真、非0即真

TRUE:真

false:'' none,[],{}

非空即真:

1528783-20181125210335549-1275665559.png

非0即真:

1528783-20181125210355263-354322137.png

练习:

#-*-coding:utf-8-*-

#需求:每分钟监控服务器日志,IP请求超过200次的,加入黑名单

#

#1、读文件,获取到每行的内容,open readlines

# 178.210.90.90 - - [04/Jun/2017:03:44:13 +0800]

#2、找到IP,按照空格分隔字符串,取第一个元素,split

# 3、把IP存到字典里,每个IP出现一次,IP次数就+1

# 4、判断IP次数是否大于200,加入黑明单

import time

point=0#定义一个指针为0,即在文件的最上边

while True:#循环

ips={}#定义一个空字典

f=open('access.log',encoding='utf-8')

f.seek(point)#指定到指针的位置

for line in f.readlines():#循环文件里的每一行,即生成list

#获取所有的IP和次数存在字典里

ip=line.split()[0]#list里面按照空格分隔字符串,第一个元素即为ip,存在变量ip里面

#print(ip)

if ip not in ips:#

ips[ip]=1#如果从list里面取到的ip不在字典ips里面,那么这个ip对应的value=1

else:

ips[ip]+=1#如果从list里面取到的ip在字典ips里面,那么这个ip对应的value的值就+1

point=f.tell()#记录读完之后的文件指针

for k,count in ips.items():

if count>200:

print('[%s]加入黑明单 '%ip)

#print(ips)

time.sleep(60)

修改文件:

文件内容如下:

1528783-20181125211418503-935622025.png

#-*-coding:utf-8-*-

# 把文件里面没有交作业的人名字后面加上‘没有交’

# 已经交作业的加上‘交了’

# 1、读文件

# 2、按照空格分隔每个人的作业信息

import os

with open('stu.txt',encoding='utf-8')as fr,open('.new_stu','w',encoding='utf-8')as fw:#打开两个文件

for line in fr:#在fr里面循环取每一行的数据

line_list=line.split()#按照空格分隔字符串,生成list

if len(line_list)>1:

line_list[-1]='已交\n'

else:

line_list.append('未交\n')

fw.writelines(line_list)

os.remove('stu.txt')

os.rename('.new_stu','stu.txt')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值