python读取大文件处理时使用多线程

Python017

python读取大文件处理时使用多线程,第1张

如果有个很大的文件,几十G?,需要每次读取一部分,处理后再读取剩余部分。

with open as f 已经从内部处理难点,使用 for line in f 以迭代器的形式每次读取一行,不会有内存问题。

下面程序的思路是用一个列表存放读取到的数据,达到长度后就开始处理,处理完就清空列表,继续执行

工作中经常会遇到处理日志文件的问题:为了得到日志的最新状态,我们需要获取日志文件的最后部分行来做判断。那么,这种情况下我们应该怎么做呢?

1)常规方法:从前往后依次读取

步骤:open打开日志文件。

读取文件,获取文件的总行数。

遍历所有行,提取指定行的数据。

优点:简单,方便

缺点:当文件大了以后时间太慢,无法忍受

2)推荐方法:

步骤:open打开日志文件。

移动文件读取指针到文件末尾。

从后往前移动指针直到合适的位置

读取文件,提取指定行的数据。

优点:时间相对固定,适合处理大文件

示例:

[python] view plain copy

logFile = open('logFilePath.log', 'r')

logFile.seek(0,2)

logFile.seek(-1000000,2)

rowCount = 0

for row in logFile.readlines()[1:]:

pass

seek():移动文件读取指针到指定位置

tell():返回文件读取指针的位置

seek()的三种模式:

(1)f.seek(p,0) 移动当文件第p个字节处,绝对位置

(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节

(3)f.seek(p,2) 移动到相对文章尾之后的p个字节