尝试用创建的临时文件替换原始文件

时间:2018-05-28 15:07:52

标签: python python-3.x file temporary-files

我想在一个文件中做一些更改。为此我正在做一个临时文件,我写了所有想要的更改的内容,最后我尝试用这个临时文件替换原始文件。

创建临时文件,它看起来像我预期的那样,但替换操作不起作用。

这是我的代码失败:

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
    os.replace(temp.name, file_path)

但这给了我一个错误:

  

PermissionError:[WinError 32]进程无法访问该文件   因为它正被另一个进程使用

我使用'替换'功能有误吗?

2 个答案:

答案 0 :(得分:1)

你的命令os.replace(temp.name,file_path)必须不在。

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
os.replace(temp.name, file_path)

答案 1 :(得分:1)

当您使用'在'内部调用replace()时该文件仍处于打开状态,因为您仍然在'范围内。'。

一旦你离开''该文件现已关闭,您现在可以用os.replace()替换。

试试吧。

with tempfile.NamedTemporaryFile(mode='w', prefix=basename, dir=dirname, delete=False) as temp, open(file_path, 'r') as f:
    for line in f:
        temp.write(line + " test")
os.replace(temp.name, file_path)