为了完整性示例,我们考虑转换字符串的foo
函数:
def foo(data):
### processes data in a fancy way ###
return data.lower() # :P
我想知道它是否是一个好主意,取代原样修改文件的典型模式,如下所示:
# snippet1
with open(path, "r") as f:
out = foo(f.read())
with open(path, "w") as f:
f.write(out)
另一个人:
# snippet2
with open(path, "r") as f1:
out = foo(f1.read())
with open(path, "w") as f2:
f2.write(out)
在所有可能的情况下,这样做是否安全?
答案 0 :(得分:0)
这不是上下文管理器的问题。两个上下文管理器工作正常问题出在这里:
open("path", "w")
打开进行写入时,文件会被截断。换句话说,删除所有数据。之后阅读将显示该文件为空。
所以你必须分两步完成。