2015-06-23 38 views
-1

我需要交換文件夾中所有文件的名稱,但每個文件都必須具有自己的唯一名稱。在Python中隨機交換文件名

我試圖循環遍歷文件夾,將所有文件添加到列表中,然後使用random.shuffle()對該列表進行混洗,然後再次循環該文件夾,但是這次按順序將重命名爲混洗列表。

它是這樣的:

for file in os.listdir("images/"): 
    os.rename(file, files_shuffle[i]) 
    i += 1 

,但我得到WinError 183「當文件已存在無法創建文件」。解決這個問題最好的辦法是什麼?

回答

0

該問題可以很容易地說明。您有下列文件:

a.txt 
b.txt 

和你要重命名它們:

b.txt -> a.txt 
a.txt -> b.txt 

但是,只要你想重新命名b.txta.txt有報告的問題,因爲文件a.txt已經存在那裏。

您可以分兩次執行的過程:

  1. 重命名一些獨特的名稱的所有文件,比如很長的數字。
  2. 將這些文件重命名爲最終(混洗)名稱。

如果臨時名稱集不與原始名稱相沖突,則該過程是安全的。

0

做到這一點的方法是在兩個步驟中重命名它們:

一個 - > 1 乙 - > 2

1 - >乙 2 - >一個

我用下面的代碼隨機更名視頻文件:

import os 
    import random 

    randlist = random.sample(range(14), 14) 

    os.rename("clip0.mp4", "video0.mp4") 
    os.rename("clip1.mp4", "video1.mp4") 
    os.rename("clip2.mp4", "video2.mp4") 
    os.rename("clip3.mp4", "video3.mp4") 
    os.rename("clip4.mp4", "video4.mp4") 
    os.rename("clip5.mp4", "video5.mp4") 
    os.rename("clip6.mp4", "video6.mp4") 
    os.rename("clip7.mp4", "video7.mp4") 
    os.rename("clip8.mp4", "video8.mp4") 
    os.rename("clip9.mp4", "video9.mp4") 
    os.rename("clip10.mp4", "video10.mp4") 
    os.rename("clip11.mp4", "video11.mp4") 
    os.rename("clip12.mp4", "video12.mp4") 
    os.rename("clip13.mp4", "video13.mp4") 


    os.rename("video0.mp4", "clip" + str(randlist[0]) + ".mp4") 
    os.rename("video1.mp4", "clip" + str(randlist[1]) + ".mp4") 
    os.rename("video2.mp4", "clip" + str(randlist[2]) + ".mp4") 
    os.rename("video3.mp4", "clip" + str(randlist[3]) + ".mp4") 
    os.rename("video4.mp4", "clip" + str(randlist[4]) + ".mp4") 
    os.rename("video5.mp4", "clip" + str(randlist[5]) + ".mp4") 
    os.rename("video6.mp4", "clip" + str(randlist[6]) + ".mp4") 
    os.rename("video7.mp4", "clip" + str(randlist[7]) + ".mp4") 
    os.rename("video8.mp4", "clip" + str(randlist[8]) + ".mp4") 
    os.rename("video9.mp4", "clip" + str(randlist[9]) + ".mp4") 
    os.rename("video10.mp4", "clip" + str(randlist[10]) + ".mp4") 
    os.rename("video11.mp4", "clip" + str(randlist[11]) + ".mp4") 
    os.rename("video12.mp4", "clip" + str(randlist[12]) + ".mp4") 
    os.rename("video13.mp4", "clip" + str(randlist[13]) + ".mp4")