You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Minecraft纹理随机化工具调用os.mkdir报FileExistsError如何解决

问题解决方法

报错直接原因

当前报错FileExistsError是因为你要创建的item1目录已经在对应路径下存在了,os.mkdir()只能创建不存在的目录,目标目录已存在时就会抛出这个错误。

解决方案步骤

1. 修复目录创建逻辑

两种方案可选:

  • 方案一:创建前先判断目录是否存在,不存在再创建,也可以直接用os.makedirs()加exist_ok=True参数,自动跳过已存在的目录
  • 方案二:如果需要每次运行都用全新的空目录,可以先删除已存在的item1目录再创建,非空目录需要用shutil.rmtree()删除

2. 修正代码里的其他隐藏问题

  • 你代码里使用了os模块的相关方法,但没有导入os模块,需要在代码开头加import os
  • 路径里混用正斜杠/和反斜杠\,Windows下反斜杠会被当做转义字符,建议统一用原始字符串(路径前加r)避免转义问题
  • 你两次调用os.listdir()获取列表,虽然大部分情况没问题,但更稳妥的做法是只获取一次原文件列表,再打乱生成新列表
  • 长路径重复写太冗余,可以提取成变量,减少出错概率

修正后的完整代码

import os
import random
import shutil

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

# 统一提取路径变量,用原始字符串避免转义问题
base_dir = r"C:\Users\PC Specialist\Documents\Python Scripts\r\assets\minecraft\textures\item"
new_dir = r"C:\Users\PC Specialist\Documents\Python Scripts\r\assets\minecraft\textures\item1"

os.chdir(base_dir)
oldTextures = os.listdir()
# 直接打乱原列表的拷贝,避免两次调用os.listdir可能出现的不一致
newRandomizedTextures = my_shuffle(oldTextures.copy())

print(newRandomizedTextures)

# 先判断新目录是否存在,存在就先删除旧的,再创建新的空目录
if os.path.exists(new_dir):
    shutil.rmtree(new_dir)
os.mkdir(new_dir)

# 用enumerate替代手动计数i,更简洁
for i, new_name in enumerate(newRandomizedTextures):
    old_file = os.path.join(base_dir, oldTextures[i])
    temp_file = os.path.join(new_dir, oldTextures[i])
    new_file = os.path.join(new_dir, new_name)
    shutil.copy(old_file, temp_file)
    os.rename(temp_file, new_file)

# 后续你需要的替换原目录的逻辑可以直接加在这里
# shutil.rmtree(base_dir)
# os.rename(new_dir, base_dir)

内容的提问来源于stack exchange,提问作者ElectricCreep444 EC444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:42:00