Python按块读取文件,但以换行符(\n)结束
test.txt 是一个用 "\n" 分隔的文本文件:
f = open('test.txt','r') f.read(256)
但是在读取256个字符时,最后的记录可能不是完整的一行。
怎么读取呢:
我设置读取256个字符,但当248个字符是 "\n" 时,256个字符的最后记录并不是完整的一行,只能读取248个字符,而 f.tell() 会返回248这个位置。
谢谢。
4 个回答
0
读取一个文件,里面的每一行长度不一样,并且行与行之间用 '\n'
、'\r'
或 '\r\n'
这些符号分隔,最简单的方法是:
with open('yourfile.txt', 'rU') as f:
for line in f:
do_something_with(f)
# optional, if you want to bale out after 256 bytes:
if f.tell() >= 256: break
这个方法的工作原理是先读取一大块内容,然后找到行的结束符,最后一行一行地返回给你。这个底层的代码是用C语言写的。我还没有看到任何证据表明用Python代码做同样的事情会更快。
2
如果你是用换行符来分隔你的数据,那为什么不以同样的方式来读取它呢?
with open('test.txt', 'r') as f:
lines = f.readlines()
# Now each line in lines is a complete line.
-1
你在乎效率吗?
这里有一种方法可以做到:
data=f.read(256)
data=data.splitlines(True)
if data[-1]!=data[-1].splitlines()[-1]:
#must be newline at end of last line
data="".join(data)
else:
data="".join(data[:-1])
print data