Python 从文件中检索数据时速度更快;[使用open()as,然后循环]或[f.readlines,然后循环]

Python 从文件中检索数据时速度更快;[使用open()as,然后循环]或[f.readlines,然后循环],python,performance,memory-management,file-io,Python,Performance,Memory Management,File Io,我有一大堆文件要读和处理 这是读取和处理文件的更快方法 with open('file') as file: for line in file: print line 或 前者可以使用缓冲读取;后者需要先将整个文件读入内存,然后才能开始循环 一般来说,最好使用前者;它不会比后者慢,而且在内存使用方面也更好。如果您有一些行基大文件,我强烈建议您使用以下行来实现您的目标: file = open('file') for line in f.readlines(): print

我有一大堆文件要读和处理

这是读取和处理文件的更快方法

with open('file') as file:
  for line in file:
      print line


前者可以使用缓冲读取;后者需要先将整个文件读入内存,然后才能开始循环


一般来说,最好使用前者;它不会比后者慢,而且在内存使用方面也更好。

如果您有一些行基大文件,我强烈建议您使用以下行来实现您的目标:

file = open('file')

for line in f.readlines():
  print line

file.close()
有两点,

  • 将所有内容读到内存中从来都不是一个好主意,正确的方法是通过主干(线)读取它们
  • 不要调用lines=f.readlines(),这也会导致将所有内容读取到内存中

  • PS:前一个“with”语句只是
    try:open()的缩写;执行:通过
    ;readlines是使用迭代器实现的,因此它不会占用您的全部内存。

    前一种方法比后一种方法涉及每行之后的I/O操作吗?缓冲读取意味着它不必在每行之后执行IO操作-就在它清空缓冲区时(缓冲区的大小自动确定)。这通常是要走的路;它允许时间和内存性能的最佳组合。对文件对象的迭代是通过迭代器实现的,因此没有理由调用
    readlines()
    with
    块在处理完文件后也会自动关闭该文件。@琥珀色迭代文件对象的语法不太容易理解,但无论如何你是对的。f.readlines()将把整个文件读入内存,而不管你是将它赋给变量还是变量not@gnibbler “这通常用于允许逐行高效读取大型文件,但不必将整个文件加载到内存中。”@Mayli,该引号指的是当
    readlines()
    与可选大小提示一起使用时。此处的相关引号是“f.readlines()返回包含文件中所有数据行的列表。"
    file = open('file')
    
    for line in f.readlines():
      print line
    
    file.close()