day4_高效处理文件
read()将文件内容从磁盘中全部读出,放到内存,再给cpu处理,性能低,如果文件量大,很容易内存溢出或卡死。
高效方式:
方式一:一般不用的,代码行多
f = open('users.txt','r',encoding='utf-8')  #打开文件
#第一种方式:
while True:  #写个死循环,知道空字符串停止循环,也就是没有内容了(文件中空行也是有东西的,不代表是空字符串)
    line = f.readline()   #line每次循环,都被替换,这个方法性能高
    if line!='':
        print('line',line)
    else:
        print('文件内容都读完了,结束了')
        break
方式二:
# 第二种方式:
for line in f: #把文件里的每一行都读到
print(line)
练习题:
#1、要从日志里面找到1分钟之内访问超过200次的
#2、每分钟都运行一次 # 1、读取文件内容,获取到ip地址
# 2、把每个ip地址存起来 {}
# 3、判断ip访问的次数是否超过200次
# 4、加入黑名单 print import time
point = 0 #初始的位置,不能定义到循环里面
while True:
f = open('access.log', encoding='utf-8')
ip_dict = {} # 这个不要放在外面,不然字典内容特别大
f.seek(point)
for line in f: #循环取文件里面每行数据
ip = line.split()[0] #按照空格分割,取第一个元素就ip
if ip in ip_dict: #判断这个ip是否存在,如果存在,则value值+1
ip_dict[ip] += 1 #如果存在的话,次数加+1
else:
ip_dict[ip] = 1 #如果第一次遇见的ip,则value值就是1
point = f.tell() #记录文件指针位置
f.close()
for ip,ipcount in ip_dict.items():#循环这个字典,判断次数大于200的
if ipcount > 200:
print('%s 加入黑名单'%ip)
time.sleep(60)#定时运行 60秒之后再读
day4_高效处理文件的更多相关文章
- tengine  lua 开源一 调用内部接口高效发送文件
		
tengine lua 开源一 调用内部接口高效发送文件 开源自己封装的sendfile 模块,可以高效的通过lua发送文件 源码地址:https://github.com/weinyzhou/Lu ...
 - php高效遍历文件夹、高效读取文件
		
/** * PHP高效遍历文件夹(大量文件不会卡死) * @param string $path 目录路径 * @param integer $level 目录深度 */ function fn_sc ...
 - python语言(三)文件修改、函数、json操作、监控日志代码、高效读取文件
		
1.文件操作(2) 代码 f = open('a.txt','a') # "a" 如果源文件不在,会自动创建 f.write('abc') result = f.read() ...
 - Kafka深入理解-1:Kafka高效的文件存储设计
		
文章摘自:美团点评技术团队 Kafka文件存储机制那些事 Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日 ...
 - c# 高效读写文件
		
一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...
 - java 21 - 6 字符缓冲流的特殊方法以及该方法高效复制文件
		
字符缓冲流的特殊方法: A.BufferedWriter: public void newLine():根据系统来决定换行符 private static void write() throws IO ...
 - Java NIO  FileVisitor 高效删除文件
		
在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效 2.电子名片二 ...
 - java之高效操作文件
		
代码: import java.io.IOException; import java.nio.file.FileVisitOption; import java.nio.file.FileVisit ...
 - Java缓冲流高效大文件的复制实例
		
public class BufferedDemo { public static void main(String[] args) throws FileNotFoundException { // ...
 
随机推荐
- linux每日命令(18):whereis命令
			
whereis命令用于查找文件. 该指令会在特定目录中查找符合条件的文件.这些文件应属于原始代码.二进制文件,或是帮助文件. 该指令只能用于查找二进制文件.源代码文件和man手册页,一般文件的定位需使 ...
 - SDL示例一:实现七段数码管的显示
			
[时间:2017-05] [状态:Open] [关键词:sdl2,数字,七段数码管,图形显示,示例代码] 0 引言 本文是针对我的step-into-sdl2/7LedDigit的原理介绍,有兴趣的可 ...
 - IDEA的maven项目中  静态文件编译的问题
			
IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉. 如果使用的是Eclipse,Eclipse的src目录下的xml等资源 ...
 - NodeJS + PhantomJS 抓取页面信息以及截图
			
利用PhantomJS做网页截图经济适用,但其API较少,做其他功能就比较吃力了.例如,其自带的Web Server Mongoose最高只能同时支持10个请求,指望他能独立成为一个服务是不怎么实际的 ...
 - 自定义progressdialog,改善用户体验
			
自定义progressdialog,改善用户体验
 - Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)
			
一.使用zookeeper管理远程Mycat配置文件 环境准备: 虚拟机192.168.152.130: zookeeper,具体参考前面文章 搭建dubbo+zookeeper+dubboadmin ...
 - Mysql系列一:SQL入门
			
csdn博客搬迁 连接数据库:1.在dos窗口下,进入数据库的安装目录的bin目录下,使用mysqld命令启动数据库服务,或者在计算机的服务里面启动mysql服务2.另外打开一个dos窗口,进入数据库 ...
 - oracle 11g 使用物化视图远程增量刷新数据
			
① 源数据库建立物化视图日志 drop MATERIALIZED VIEW LOG ON ORG_BASEINFO/ CREATE MATERIALIZED VIEW LOG ON ORG_BASEI ...
 - Spring源码学习:day2
			
前言: 我还是太懒了,连截图都懒得粘贴,故直接用书上说的话的截图吧. 代码的编写过程都是应该有一个入口的,所有的代码最终都是为了那个入口更加方便更加简单而产生的. 看代码的过程,就应该抓住主线,顺着主 ...
 - SpringBoot(三)整合Redis
			
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...