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

2024-04-20 03:46:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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)

这些实践中,哪一种通常是更好的和更被接受的方法呢?你知道吗


Tags: 文件方法intxt内容foraswith
1条回答
网友
1楼 · 发布于 2024-04-20 03:46:39

没有“更好”的解决办法。仅仅是因为这两者远远不相等。你知道吗

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

第二种方法只将文件的一部分加载到内存中,对其进行处理,然后加载另一部分,依此类推。这通常比较慢(尽管您可能看不到区别,因为处理时间(尤其是Python中的处理时间)通常会主导读取时间),但会大大减少内存消耗(假设您的文件有多行)。而且在某些情况下,可能更难处理。例如,假设您正在文件中查找特定的模式xy\nz。现在“逐行”加载时,您必须记住前一行,以便进行正确的检查。这是更难实现(但只有一点)。所以再说一遍:这取决于你在做什么。你知道吗

正如你所看到的,有一些权衡,什么更好取决于你的环境。我经常这样做:如果文件相对较小(比如说高达几百兆字节),则将其加载到内存中。你知道吗

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

相关问题 更多 >