【问题标题】:Randomly swapping file names in Python在 Python 中随机交换文件名
【发布时间】:2023-03-19 22:46:01
【问题描述】:

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

我尝试遍历文件夹,将所有文件添加到列表中,然后使用 random.shuffle() 对该列表进行混洗,然后再次遍历该文件夹,但这次将每个文件按顺序重命名为混洗列表。

是这样的:

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

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

【问题讨论】:

    标签: python random filenames shuffle


    【解决方案1】:

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

    a.txt
    b.txt
    

    你要重命名它们:

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

    但是,一旦您想将 b.txt 重命名为 a.txt,就会报告问题,因为文件 a.txt 已经存在。

    您可以分两次执行该过程:

    1. 将所有文件重命名为一些唯一的名称,例如非常长的数字。
    2. 将这些文件重命名为最终(改组)名称。

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

    【讨论】:

      【解决方案2】:

      这样做的方法是分两步重命名它们:

      一个 --> 1 b --> 2

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 2023-03-08
        • 2019-03-23
        • 1970-01-01
        相关资源
        最近更新 更多