如何逐行读取大文件?

600

我想要迭代整个文件的每一行。其中一种方法是读取整个文件,将其保存到列表中,然后遍历感兴趣的行。但这种方法会使用大量内存,所以我正在寻找另一种方法。

目前我的代码:

for each_line in fileinput.input(input_file):
    do_something(each_line)

    for each_line_again in fileinput.input(input_file):
        do_something(each_line_again)

执行此代码会出现错误信息:设备已激活

有什么建议吗?

目的是计算逐对字符串相似度,即对于文件中的每一行,我想计算其与所有其他行之间的Levenshtein距离。

2022年11月编辑:在此问题提出8个月后,有一个相关问题有许多有用的答案和评论。为了更深入地了解Python逻辑,请阅读这个相关问题如何逐行读取Python文件?


4
为什么需要针对每一行重新读取整个文件?如果您告诉别人您想要实现的目标,也许有人可以建议更好的方法。 - JJJ
如果文件太大而无法将其先读入内存,那么没有任何O(N^2)算法(即考虑每对行)是实用的。可以尝试避免将整个文件存储在内存中并迭代每对行,但要么仍需要使用O(N)内存来记住行开头的位置,要么涉及一些冗余的读取。 - Karl Knechtel
1
(然后还有一个问题,那就是你要对这些数据做什么...) - Karl Knechtel
如果您需要处理二进制文件,请参阅如何迭代遍历二进制文件的惯用方式? - Karl Knechtel
11个回答

-3

读取大文件最好的方法是使用Python的enumerate函数,逐行读取。

with open(file_name, "rU") as read_file:
    for i, row in enumerate(read_file, 1):
        #do something
        #i in line of that line
        #row containts all data of that line

3
使用枚举有什么好处吗?与被接受的答案相比,唯一的好处是你可以得到一个索引,但是 OP 不需要它,而且使用枚举会使代码更难读。 - fuyas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接