强制覆盖Os.Renam中文标题翻译

2024-03-28 15:10:34 发布

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

是否可以强制重命名os.rename以覆盖另一个文件(如果它已经存在)?例如,在下面的代码中,如果文件Tests.csv已经存在,则它将被Tests.txt文件(也被重命名为Tests.csv)替换。

os.rename("C:\Users\Test.txt","C:\Users\Tests.csv");

Tags: 文件csv代码testtxtostestsusers
3条回答

你可以试试^{}

from shutil import move

move('C:\\Users\\Test.txt', 'C:\\Users\\Tests.csv')

或者os.remove然后shutil.move

from os import remove
from shutil import move

remove('C:\\Users\\Tests.csv')
move('C:\\Users\\Test.txt', 'C:\\Users\\Tests.csv')

正如documentation所说,如果文件存在,就不可能保证在Windows上执行原子重命名操作,所以Python所做的是要求自己执行两步os.remove+os.rename,处理潜在的错误。

在unix系统上,rename覆盖目标(如果存在)(因为该操作保证是原子的)。

请注意,在windows上,删除目标文件也可能失败,即使您有权限,因为该文件可能正在使用中。这是windows文件系统的另一个基本限制,您必须在代码中自己处理它。

自Python 3.3以来,现在有了一个标准的跨平台解决方案,^{}

Rename the file or directory src to dst. If dst is a directory, OSError will be raised. If dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement).

Availability: Unix, Windows.

New in version 3.3.

然而,与文档相反,在Windows上它不能保证是原子的(在Python 3.4.4中)。这是因为internally它在Windows上使用^{},这并不能保证。

相关问题 更多 >