取大文件最后N行数据, 这个问题, 如果是我想的话, 就直接往'\n'字符里去想了:
1. 使用seek, 从后面读一块数据出.
2. 数'\n'的个数.
看到人家这样做:
import os
def tail (name, n_line):
lines = []
f = file (name)
n = 1
while len(lines) <= n_line:
try:
// -n_line * 80 是一个大概猜测的一块数据长度
f.seek (-n_line * 80 * n, os.SEEK_END)
// 当 len( lines ) > n_line 才跳出循环, 其中, lines[0]行的数据不一定是完整的
// 这代码的好处就是当最小条件跳出循环时, len( lines ) ==4 . 就算lines[0]是不完整的数据也没有关系. 因为只想取len(lines) - 1 行的数据.
lines = f.readlines()
n = n + 1
except:
lines = f.seek (0, os.SEEK_SET)
lines = f.readlines ()
break
return lines[-n_line:]
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.