您的位置:首页 > 编程语言 > Python开发

Python文件倒读,主要用于日志分析

2015-06-05 00:00 609 查看
摘要: Python文件倒读,主要用于日志分析

#!/usr/bin/env python

#-*- coding:utf-8 -*-

"""

思路:

先将指针移动到文件最后

f.seek(0,2)

向前移动2位读一位

f.seek(-2,1)

f.read(1)

f.tell() == 1 到达文件顶部退出循环

文件内容:

a

b

c

d

"""

f = open('文件倒读.txt')

f.seek(0,2)

while f.tell() > 1:

f.seek(-2,1) #第一个参数偏移量,第二个参数 当前位置:0,文件开始1,当前位置,2文件最后

c = f.read(1)

print c,

f.close()

#!/usr/bin/env python

#-*- coding:utf-8 -*-

"""

思路:

先将指针移动到文件最后

f.seek(0,2)

向前移动2位读一位

f.seek(-2,1)

f.read(1)

f.tell() == 1 到达文件顶部退出循环

文件内容:

1a

2b

3c

4d

"""

f = open('文件倒读.txt')

line = ''

f.seek(0,2)

#while f.tell() > 1:

while True:

if f.tell() == 1:

print line

break

f.seek(-2,1) #第一个参数偏移量,第二个参数 当前位置:0,文件开始1,当前位置,2文件最后

c = f.read(1)

if c != '\n':

line = c + line

else:

print line

line = ''

f.close()

#!/usr/bin/env python

#-*- coding:utf-8 -*-

"""

思路:

先将指针移动到文件最后

f.seek(0,2)

向前移动2位读一位

f.seek(-2,1)

f.read(1)

f.tell() == 1 到达文件顶部退出循环

文件内容:

1a

2b

3c

4d

"""

import sys

def filerev(file):

fd = open(file)

line = ''

fd.seek(0,2)

#while f.tell() > 1:

while True:

if fd.tell() == 1:

yield line

break

else:

fd.seek(-2,1) #第一个参数偏移量,第二个参数 当前位置:0,文件开始1,当前位置,2文件最后

c = fd.read(1)

if c != '\n':

line = c + line

else:

yield line

line = ''

fd.close()

def main():

a = filerev('文件倒读.txt’)#生成器对象,返回文件类型

for i in a:

print i

if __name__ =='__main__':

main()

buff方法读取

#!/usr/bin/env python

#-*- coding:utf-8 -*-

"""

思路:

先将指针移动到文件最后

f.seek(0,2)

向前移动2位读一位

f.seek(-2,1)

f.read(1)

f.tell() == 1 到达文件顶部退出循环

文件内容:

1a

2b

3c

4d

"""

import sys

def filerev(file):

buf = 256

fd = open(file)

line = ''

fd.seek(0,2)

size = fd.tell()

rem = size % buf

pos = max(0,size-(buf+rem))

#while f.tell() > 1:

while True:

if pos < 0:

yield line

break

else:

fd.seek(pos) #第一个参数偏移量,第二个参数 当前位置:0,文件开始1,当前位置,2文件最后

d = fd.read(buf+rem)

rem = 0

pos -= buf

if '\n' in d:

for c in reversed(d):

if c != '\n':

line = c+line

else:

if line:

yield line

line = ''

else:

line = d+line

fd.close()

def main():

a = filerev('文件倒读.txt')#生成器对象,返回文件类型

for i in a:

print i

if __name__ =='__main__':

main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: