猿问

如何用Python逐行读取大文件

如何用Python逐行读取大文件

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

到目前为止我的代码是:

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)

执行此代码将给出一条错误消息:device active.

有什么建议吗?

目的是计算成对的字符串相似度,意思是对于文件中的每一行,我要计算Levenshtein与其他每一行的距离。


MYYA
浏览 1581回答 3
3回答

沧海一幻觉

读取文件的正确、完全Pythonic方法如下:with open(...) as f:     for line in f:         # Do something with 'line'这个with语句处理打开和关闭文件,包括在内部块引发异常时。这个for line in f处理文件对象f作为一个可迭代,它自动使用缓冲I/O和内存管理,所以您不必担心大文件。

胡子哥哥

剥去新线路:with open(file_path, 'rU') as f:     for line_terminated in f:         line = line_terminated.rstrip('\n')         ...带着通用换线支撑所有文本文件行将以'\n'不管文件里有什么终结者,'\r', '\n',或'\r\n'.编辑-要指定通用换行符支持,请执行以下操作:Unix上的Python 2-open(file_path, mode='rU')-所需[谢谢@Dave]Windows上的Python 2-open(file_path, mode='rU')-任选Python 3-open(file_path, newline=None)-任选这个newline参数仅在Python 3中支持,默认为None..这个mode参数默认值为'r'在任何情况下。这个U在Python 3中被废弃。在Windows上的Python2中,其他一些机制似乎可以转换\r\n到\n.医生:Python 2的open()Python 3的open()为了保留本机线路终止符:with open(file_path, 'rb') as f:     with line_native_terminated in f:         ...二进制模式仍然可以将文件解析为in..每一行都有它在文件中的任何终止符。感谢@katrielalex氏回答,Python的开放()医生,还有IPython实验。
随时随地看视频慕课网APP

相关分类

Python
我要回答