代码之家  ›  专栏  ›  技术社区  ›  ruohola

最好是读取整个文件,关闭它,然后循环它,还是在它打开时循环?

  •  1
  • ruohola  · 技术社区  · 7 年前

    是否最好使用以下方法尽快关闭文件:

    with open('somefile.txt') as f:
        lines = f.readlines()
    
    for line in lines:
        do_something(line)
    

    或者只是一次循环:

    with open('somefile.txt') as f:
        for line in f:
            do_something(line)
    

    0 回复  |  直到 7 年前
        1
  •  7
  •   freakish    7 年前

    没有“更好”的解决方案。只是因为这两个

    第一种方法将整个文件加载到内存中,然后处理内存中的数据。这有一个潜在的优势,即根据处理的内容,速度更快。请注意,如果文件大于您拥有的RAM量,那么这根本不是一个选项。

    第二种方法只将文件的一部分加载到内存中,对其进行处理,然后加载另一部分,依此类推。这通常比较慢(虽然您可能看不到区别,因为处理时间,特别是Python中的处理时间通常支配着读取时间),但是会大大减少内存消耗(假设文件超过1行)。另外,在某些情况下,可能更难处理。例如,假设您正在寻找一个特定的模式 xy\nz 在文件里。现在有了“一行一行”的加载,你必须记住上一行,以便进行正确的检查。这是更难实现(但只是一点点)。所以再次重申:这取决于你在做什么。

    现在你已经提到了内容是“关键的”。我不知道这意味着什么,但举例来说,如果你试图更新文件原子或读取一致的进程,那么这是一个非常不同的问题,你已经张贴。一般来说,我很难使用适当的数据库。SQLite是一个简单的选项(同样:取决于您的场景),类似于拥有一个文件。