簡體   English   中英

os.replace() 和 os.rename() 的區別?

[英]Difference between os.replace() and os.rename()?

我想使用 linux 和 python 將文件從一個目錄移動到另一個目錄。我希望實現類似於 bash mv命令的行為。

這兩個命令在實踐中有什么區別

os.replace()
os.rename()

如果文件存在於目標中,那么os.rename()是否會引發錯誤,而os.replace()會覆蓋它?

另外,如果我看到另一個次要區別,那就是os.replace()需要一個文件作為目標,而不僅僅是目錄。

我可以在任何地方找到直接的答案。

在 POSIX 系統上,如果用戶有足夠的權限,重命名系統調用將以靜默方式替換目標文件。 在 Windows 上則不然。

os.replaceos.rename在 POSIX 系統上是相同的 function,但在 Windows 上os.replace將調用MoveFileExW並設置MOVEFILE_REPLACE_EXISTING標志以提供與 POSIX 系統相同的效果。

如果你想要一致的跨平台行為,你應該考慮在整個過程中使用os.replace

os.重命名()

os.rename()方法用於重命名文件或目錄。 此方法將源文件/目錄重命名為指定的目標文件/目錄。

操作系統.replace()

os.replace()方法也用於重命名文件或目錄。

但:

  • 如果目標是目錄,則會引發OSError
  • 如果目標存在並且是一個文件,如果執行操作的用戶具有權限,它將被無錯誤地替換。
  • 如果源和目標位於不同的文件系統上,此方法可能會失敗

來自文檔

os.replace()

將文件或目錄 src 重命名為 dst。 如果 dst 是目錄,則會引發 OSError。 如果 dst 存在並且是一個文件,如果用戶有權限,它將被靜默替換。 如果 src 和 dst 在不同的文件系統上,操作可能會失敗。 如果成功,重命名將是一個原子操作(這是 POSIX 要求)。

os.rename()

將文件或目錄 src 重命名為 dst。 如果 dst 存在,則在許多情況下操作將失敗並出現 OSError 子類:在 Windows 上,如果 dst 存在,則始終會引發 FileExistsError。 在 Unix 上,如果 src 是文件並且 dst 是目錄,反之亦然,將分別引發 IsADirectoryError 或 NotADirectoryError。 如果兩者都是目錄且 dst 為空,則 dst 將被靜默替換。 如果 dst 是非空目錄,則會引發 OSError。 如果兩者都是文件,dst 如果用戶有權限,它將被靜默替換。 如果 src 和 dst 在不同的文件系統上,該操作可能會在某些 Unix 風格上失敗。 如果成功,重命名將是一個原子操作(這是 POSIX 要求)。 這個 function 可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供相對於目錄描述符的路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM