簡體   English   中英

os.rename 無法創建已存在的文件

[英]os.rename cannot create a file that already exists

現在我正在嘗試使用 python 重命名包含 txt 文件的文件夾的內容:

原始文件命名從 0.txt 到 100.txt

我想將它們的名稱更改為從 10 而不是 0 開始(例如,文件將是 10.txt 到 110.txt)

我有 2 個列表,一個包含原始名稱路徑,另一個包含新名稱路徑,我正在嘗試使用 os.rename() 或 shutil.move() 來重命名文件。

但是,當我嘗試使用 os.rename() 時,出現無法創建已存在文件的錯誤。

當我嘗試使用 shutil.move() 時,它會刪除每個重復的文件夾,只給我最后 9 個文件夾(101 到 110)。

有沒有解決的辦法 ??

我建議移動文件並在臨時目錄中重命名它們,刪除原始文件並將文件從臨時目錄移回。 然后您可以選擇刪除您創建的臨時目錄。

你准確地定義了問題。 例如,當您處理 02.txt 時,您將其重命名為 12.txt。 十次迭代后,您將同一個文件重命名為 22.txt,然后是 23.txt,...直到完成 102.txt。 您對前 10 個文件執行此操作,系統地清除其他 90 個文件。

您必須從具有擴展空間的名稱空間的末尾開始。 從 100.txt向下工作。 將 100.txt 重命名為 110.txt,然后將 99.txt 重命名為 109.txt,等等。這樣,您的動作總是有 10 個未使用的文件名的間隔。

編碼留給讀者作為練習。 :-)

聽起來您需要從列表的末尾開始。 嘗試先移動 100->110,然后移動 99->109,等等。因為如果您從列表的開頭開始移動 1->11,那么當您嘗試移動 1->11 時,11 將已經存在。

編輯:我實際上推薦上面的 Tarranoth 的答案

使用os.replace()替換已經存在的文件。 要檢查文件是否存在,請使用os.path.isfile('file path')

嘗試反轉列表(使用原始名稱和新名稱):

listOrig = ["0.txt", "1.txt", ..., "100.txt"]
listNew = ["10.txt", "11.txt", ..., "110.txt"]

# Reverse the lists
listOrig = listOrig.reverse() # ["100.txt" ... "0.txt"]
listNew = listNew.reverse() # ["110.txt" ... "10.txt"]

暫無
暫無

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

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