首页 > 解决方案 > 由于问题而不随机化文件名

问题描述

我开始学习python,我想我应该尝试制作一个程序。所以我尝试制作我的世界纹理随机器。我认为我的代码是有道理的,但是我没有考虑到一个巨大的问题。当我以随机顺序重命名文件时。例如,它不能重命名。“Obsidian.png”->“Endstone.png”作为黑曜石,所以我尝试使用os.mkdir()并复制文件并将其粘贴到该文件夹​​中,然后它会重命名该文件,但是仍然有一条消息。只是为了澄清我会这样做,所以它将删除旧文件夹并将新文件夹重命名为相同的名称。

我的代码:

import random
import shutil

def my_shuffle(arr):
    random.shuffle(arr)
    return arr

os.chdir('C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item')
oldTextures = os.listdir()
newRandomizedTextures = my_shuffle(os.listdir())

print(newRandomizedTextures)
i = 0

os.mkdir("C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item1")

for x in newRandomizedTextures:
    shutil.copy('C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item/' + oldTextures[i], 'C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item1')
    os.rename('C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item1/' + oldTextures[i], 'C:/Users/PC Specialist/Documents/Python Scripts/r/assets/minecraft/textures/item1/' + newRandomizedTextures[i])
    i = i + 1

这是错误:

Traceback (most recent call last):
  File "C:\Users\PC Specialist\Documents\Python\pythonProject\main.py", line 16, in <module>
    os.mkdir("C:/Users/PC Specialist/Documents/Python Scripts/r/assets\minecraft/textures/item1")
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:/Users/PC Specialist/Documents/Python Scripts/r/assets\\minecraft/textures/item1'

标签: pythonshutil

解决方案


您最初的错误是由于 mkdir 行。第二次运行脚本时,它将尝试再次创建相同的目录。您可以手动创建目录并删除该行或在其周围放置一个 try/except 并忽略错误:

try:
    os.mkdir("/blah")
except FileExistsError:
    # ignore
    pass

我认为当你测试你的shutil.move时这是一个类似的问题。您应该在运行之间清理目录。

您可以使用一个巧妙的技巧:

for i, newTexture in enumerate(newRandomizedTextures):
    print(i)
    print(newTexture)

enumerate 会给你索引。


推荐阅读