1.seek(offset,where) where=0,1从当前位置移动,2从结束位置移动
当有换行时,会被截断。seek()无返回值,值为None
2.tell() 文件的当前位置,tell是获得文件指针位置,受seek,readline,read,readlines影响,不受truncate影响
3.truncate(n) 从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除
4.readline(n) 读入若干行,n表示读入的最长字节数。其中读取的开始位置为tell()+1.当n为空时,默认只读当前行的内容
5.readlines读入所有行内容
#!/usr/bin/env python
import sys
def filerev(fd):
buff = 256
fd.seek(0,2)
size = fd.tell()
rem = size % buff
pos = max(0,(size - (buff + rem)))
line = ''
while pos >= 0:
fd.seek(pos,0)
d = fd.read(buff+rem)
rem = 0
pos -= buff
if '\n' in d:
for c in reversed(d):
if c != '\n':
line = c + line
else:
if line:
yield line
line = c
else:
line = d + line
else:
yield line
if __name__ == '__main__':
#file = sys.argv[1]
#with open(file) as fd:
# for i in filerev(fd):
# print i
with open('1.txt') as fd:
print [i for i in filerev(fd)]
转载于:https://blog.51cto.com/muzinan110/1439035