2

我正在使用 Python 逐行读取文本文件。每行的长度可变。第一行可以是 10 个字符,下一行可以是 100 个;没有办法说。目前,我为每一行发出一个 file.readline() 方法,对其进行处理,然后将其保存到数据库中。这种方法可以保证我输入一整行。不过,我想更快地做到这一点。有没有办法使用 Python file.read() 方法进行批量读取,这样当缓冲区停止在一行中间时,我可以保证一个行尾读取字符?处理这个问题的最佳方法是什么?

4

3 回答 3

6

处理这些的典型方法是:

for line in fileobj:
    process(line)

没有办法实际指定read在行尾结束。你可以用fileobj.seek. 基本上,您将读取 N 个字节,在返回的字符串中找到最后一个换行符(使用string.rfind),您可以向后查找那么多字节。


当然,如果你有足够的内存,你可以一次读入整个文件:

list_of_lines = fileobj.readlines()

但是,我真的不肯定你会在这里看到任何明显的加速。您确定您没有在需要之前进行优化吗?

于 2012-09-26T20:51:16.150 回答
1

您可以使用 ..

lines = file_handle.read().split('\n')
# Or 
lines = file_handle.readlines()

使用 .检查他们的文档以了解准确的行为'\n'

于 2012-09-26T20:52:52.617 回答
0

我搞砸的编码器这样做的方式是读取那里的任何内容或特定的块大小,注意最后一个换行符的位置(.rfind('\n')),将数据处理到该换行符,然后从换行符存储到列表中的块的末尾。读取下一个块时,您从与之前停止读取的位置相同的位置读取,并将之前的剩余字符串附加到它上面。性能是合理的,而且很稳定,当然这是针对网络套接字的,你不能向后搜索,我不确定哪种方法实际上对文件的性能更好。

于 2012-09-28T14:53:54.003 回答