我想知道,哪种方式是逐行处理文件内容的更好,更安全的方法。这里的假设是文件的内容非常重要,但是文件不是很大,因此内存消耗不是问题。
最好使用以下方法尽快关闭文件:
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)
没有“更好”的解决方案。仅仅是因为这两个远并不相同。
第一个将整个文件加载到内存中,然后处理内存中的数据。这具有根据处理内容而更快的潜在优势。请注意,如果文件大于您所拥有的RAM数量,那么根本就不选择此选项。
第二个文件仅将文件的一部分加载到内存中,进行处理,然后加载另一部分,依此类推。这通常比较慢(尽管您可能看不到差异,因为通常处理时间(尤其是在Python中,占主导地位的是读取时间))却大大减少了内存消耗(假设您的文件多于1行)。同样在某些情况下,使用它可能会更加困难。例如,假设您正在文件中寻找特定的模式xy\nz
。现在,通过“逐行”加载,您必须记住上一行才能进行正确的检查。这比较难实现(但只有一点点)。再说一遍:这取决于您在做什么。
如您所见,存在一些折衷,哪个更好取决于您的上下文。我经常这样做:如果文件比较小(例如几百兆字节),则将其加载到内存中。
现在您已经提到内容是“关键的”。我不知道这是什么意思,但是例如,如果您尝试对文件进行原子更新或在进程之间读取一致,那么这与您发布的问题完全不同。而且通常很难,因此我建议使用适当的数据库。 SQLite是一个简单的选项(再次:取决于您的情况),类似于拥有文件。