按 指定行数 分页读取好处理:
def iterpage(istream, pagesize):buffer = []
for data in istream:
buffer.append(data)
if len(buffer)>=pagesize:
yield buffer
buffer = []
if buffer:
yield buffer
with open("source.txt", 'rt') as handle:
for page in iterpage(handle, 1000):
print page # or your business logical
print "-"*32 # page break
删除文本文件的前N行:
def removehead(filename, headlines):buffer = []
with open(filename, 'rt') as handle:
for i, ln in enumerate(handle):
if ln < headlines:
continue
buffer.append(ln)
with open(filename, 'wt') as handle:
handle.writelines(buffer)
或者:
def getandremovehead(filename, headlines):with open(filename, 'rt') as handle:
buffer = handle.readlines()
with open(filename, 'wt') as handle:
handle.writelines(buffer[headlines:])
return buffer[:headlines]
但遇到大文本文件时,删除其中N行不是很理想的业务方案
for循环遍历,实际上是返回一个迭代器,并不断调用其next()方法的过程。next()返回什么,取决于迭代器的具体实现,对于str类型来说,就返回下一个字符串;对于file类型来说,就返回下一行。