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 { // ...
随机推荐
- 在Centos 6 64bit 上安装 Hyperic HQ 5.8.2.1 中文版
原文:https://my.oschina.net/hyperichq/blog/306791 环境描述: [test@tester ~]$ cat /etc/issue CentOS release ...
- 9款最好的JavaScript压缩工具
削减是一个从源代码中删除不必要的字符的技术使它看起来简单而整洁.这种技术也被称为代码压缩和最小化.在这里,我们为你收集了10个最好的JavaScript压缩工具将帮助您删除不必要的空格,换行符,评论, ...
- JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的 ...
- Kiss MySQL goodbye for development and say hello to HSQLDB
The days of using MySQL, DB2, PostgreSQL etc for development is over.. I don’t know why any program ...
- (原)测试 Java中Synchronized锁定对象的用法
今天再android_serial_port中看到了关键字 synchronized;因为刚好在学java和android,所以就查了一下它的用法: 于是把代码中的一小段代码拿了出来,做了一下修改,测 ...
- Java8学习笔记(十)--自定义收集器
前言 以前写过Java8中的自定义收集器,当时只是在文章末尾放了个例子,觉得基本用法挺简单,而且有些东西没搞懂(比如combiner方法到底做什么的),没有专门写,过了一段时间又忘了,所以,即使还是没 ...
- Scala学习笔记(四):apply方法说明
当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖.请看下面一个简单的例子: class Foo(foo: String) {} object Foo { def app ...
- memcpy in place 数组内拷贝
首先看一段代码 #include <stdio.h> #include <pthread.h> int main(){ ]; ; ; i++) { t1[i] = i; pri ...
- Android中使用第三方jar包
步骤: 方法1:Eclipse下, 右键工程, Build path, java build path, 选择libraries 在右边的按钮中点击“Add Library” 选择“User libr ...
- 7.17python
1.事件: # !/usr/bin/env python # !--*--coding:utf-8 --*-- # !@Time :2018/7/17 10:38 # !@Author TrueNew ...