为了账号安全,请及时绑定邮箱和手机立即绑定

如何用Python逐行读取大文件

如何用Python逐行读取大文件

MYYA 2019-06-09 15:51:56
如何用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与其他每一行的距离。
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

读取文件的正确、完全Pythonic方法如下:

with open(...) as f:
    for line in f:
        # Do something with 'line'

这个with语句处理打开和关闭文件,包括在内部块引发异常时。这个for line in f处理文件对象f作为一个可迭代,它自动使用缓冲I/O和内存管理,所以您不必担心大文件。

查看完整回答
反对 回复 2019-06-09
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

剥去新线路:

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.

医生:

为了保留本机线路终止符:

with open(file_path, 'rb') as f:
    with line_native_terminated in f:
        ...

二进制模式仍然可以将文件解析为in..每一行都有它在文件中的任何终止符。

感谢@katrielalex回答,Python的开放()医生,还有IPython实验。


查看完整回答
反对 回复 2019-06-09
  • 3 回答
  • 0 关注
  • 1580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信