在工作中,我们常会遇到一个很大的文件(通常为log文件),当出现问题的时候,我们想使用程序来处理日志文件来对问题进行分析。一般可以使用shell脚本等来处理,有时候也会用一些脚本语言(比如:python)来对日志进行处理。一般程序都需要将待处理的文件载入内存,然后才进行处理,这种方式需要很大的内存资源。但一般使用的机器没有这么大的内存,那又如何处理呢?
针对python对文件的处理,一般有read、readline、readlines三种读取文件的方法。调用read()会一次性读取文件的全部内容,如果文件太大,内存就会超载,对于大内存可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。
以下就是使用Python脚本语言对大文件进行处理常使用的方法。
方法一 使用with语句
with 语句的语法格式
with context_expression [as target(s)]:
with-body
这里 context_expression 要返回一个上下文管理器对象,该对象并不赋值给 as 子句中的 target(s) ,如果指定了 as 子句的话,会将上下文管理器的 enter() 方法的返回值赋值给 target(s)。target(s) 可以是单个变量,或者由“()”括起来的元组(不能是仅仅由“,”分隔的变量列表,必须加“()”)。
测试
# 每读取一万数据打印一次行号
def read_data(file_path):
index = 0
with open(file_path) as lines:
for line in lines:
index = index + 1
if index % 10000 == 0:
print index
方法二
将文件分割处理后读取,每当读取一个后关闭并读取另外一个。
网友评论