在Python中随机交换文件名

在Python中随机交换文件名,python,random,filenames,shuffle,Python,Random,Filenames,Shuffle,我需要交换文件夹中所有文件的名称,但每个文件都必须有自己的唯一名称 我尝试在文件夹中循环,将所有文件添加到列表中,然后使用random.shuffle()洗牌该列表,然后再次在文件夹中循环,但这次按顺序将每个文件重命名为洗牌列表 是这样的: for file in os.listdir("images/"): os.rename(file, files_shuffle[i]) i += 1 但我得到WinError183“当文件已经存在时无法创建文件”。解决这个问题的最佳方法是

我需要交换文件夹中所有文件的名称,但每个文件都必须有自己的唯一名称

我尝试在文件夹中循环,将所有文件添加到列表中,然后使用random.shuffle()洗牌该列表,然后再次在文件夹中循环,但这次按顺序将每个文件重命名为洗牌列表

是这样的:

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

但我得到WinError183“当文件已经存在时无法创建文件”。解决这个问题的最佳方法是什么?

这个问题很容易说明。您有以下文件:

a.txt
b.txt
您将要重命名它们:

b.txt -> a.txt
a.txt -> b.txt
但是,只要您想将
b.txt
重命名为
a.txt
,就会出现报告的问题,因为文件
a.txt
已经存在

您可以在两个过程中实现该过程:

  • 将所有文件重命名为一些唯一的名称,例如很长的数字
  • 将这些文件重命名为最终(无序)名称

  • 如果临时名称集不与原始名称冲突,则该过程是安全的。

    方法是分两步重命名它们:

    a-->1 b-->2

    1-->b 2-->a

    我用以下代码随机重命名了视频文件:

        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")