Python按块读取文件,但以换行符(\n)结束

-1 投票
4 回答
1842 浏览
提问于 2025-04-17 12:38

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

撰写回答