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

问题描述 投票:2回答:1

我想知道,哪一种是逐行处理文件内容的更好,更安全的方法。这里的假设是文件的内容非常关键,但文件不是很大,因此内存消耗不是问题。

使用此方法尽快关闭文件是否更好:

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)

这些做法中的哪一种通常更好,更容易接受?

python python-3.x file file-read
1个回答
7
投票

没有“更好”的解决方案。仅仅因为这两者远非等同。

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

第二个只将一部分文件加载到内存中,处理它然后加载另一个文件,依此类推。这通常较慢(尽管您可能不会看到差异,因为通常处理时间,尤其是Python中的处理时间占据了读取时间),但是大大减少了内存消耗(假设您的文件有多于1行)。在某些情况下,可能更难以使用。例如,假设您正在文件中查找特定模式xy\nz。现在,通过“逐行”加载,您必须记住上一行,以便进行正确的检查。哪个更难实现(但只是一点点)。再说一次:这取决于你在做什么。

正如您所看到的,存在权衡取舍,更好的取决于您的背景。我经常这样做:如果文件相对较小(比如高达几百兆字节),则将其加载到内存中。

现在你已经提到内容是“关键的”。我不知道这意味着什么,但是例如,如果您尝试更新文件原子或在进程之间读取一致,那么这与您发布的问题完全不同。一般来说很难,所以我建议使用适当的数据库。 SQLite是一个简单的选项(再次:取决于您的场景)类似于拥有文件。

© www.soinside.com 2019 - 2024. All rights reserved.