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

Python 试图用创建的临时文件替换原始文件,python,python-3.x,file,temporary-files,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:

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

临时文件已创建,看起来和我预期的一样,但替换操作不起作用

这是我失败的代码:

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]进程无法访问该文件 因为它正被另一个进程使用

我对“替换”功能的使用是否错误

您的命令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)

在“with”内调用replace()时,文件仍处于打开状态,因为您仍在“with”的范围内

一旦退出“with”,文件现在已关闭,您现在可以用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)

这个错误似乎不言自明。您需要在写入临时文件后,在替换之前关闭临时文件。不要使用
os.replace
。使用
os.replace
仅在源设备和目标设备位于同一设备上时才有效。
os.replace
仍包含在
中,tempfile(…)为…
,这意味着您的tempfile仍处于打开状态。正如错误所提示的,您不能在文件仍在使用时更改它。去掉最后一行的缩进,你就没事了。