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

Python使用os.chdir切换目录后无法创建文件夹问题

问题描述

我能在main.py所在路径创建文件夹,但调用os.chdir切换到其他目录后,无法在该目录创建文件夹。程序能检测目标文件夹是否存在,但os.mkdir操作无任何反应,也没有输出提示。我注意到目标目录标记为“只读”,但main.py所在目录是该目录的子目录,且在子目录中可以正常创建文件夹,同时os.access检测显示目标目录具备可写权限。

附上代码:

import os
default_path = os.getcwd()
new_path = ""
print("Current directory:", default_path)
if(input("Do you want to change the directory? (y/n): ") == "y"):
    new_path = input("You can use relative path or absolute path \nEnter the new directory: ")
    new_path = os.path.abspath(new_path)
    if os.path.exists(new_path):
        os.chdir(new_path)
        print("Directory changed to", os.getcwd())
        print(os.access(os.getcwd(), os.W_OK))
    else:
        print("Directory does not exist.")

day_to_start = input("Number to start with(Ex: type 1 for Day 1): ").strip()
day_to_end = input("Amount to create: ").strip()
for i in range(int(day_to_start), int(day_to_end) + 1):
    if os.path.exists(f"Day {i}"):
        print(f"Day {i} already exists.")
    else:
        os.mkdir(f"Day {i}")
        print(f"Day {i} created.")

问题分析与解决办法

  • Windows只读属性的特殊性:Windows文件夹的“只读”标记并非严格的写入限制,更多是给资源管理器的提示,实际权限需看NTFS权限设置。你能在子目录创建文件夹,说明父目录权限允许子目录继承,但直接在父目录创建内容可能存在隐藏限制。
  • os.access的局限性:os.access仅基于当前进程有效权限做检测,但实际执行os.mkdir时,可能因Windows虚拟文件系统、权限继承规则或其他进程锁定导致失败,而你的代码未捕获异常,所以无任何错误提示。
  • 具体修复步骤:
    1. 添加异常捕获:在os.mkdir代码块外包裹try-except,打印具体错误信息,明确失败原因:
      else:
          try:
              os.mkdir(f"Day {i}")
              print(f"Day {i} created.")
          except Exception as e:
              print(f"Failed to create Day {i}: {str(e)}")
      
    2. 检查NTFS实际权限:右键目标目录→属性→安全→编辑,确认当前用户拥有“创建文件夹/附加数据”的直接权限,而非仅通过子目录继承获得权限。
    3. 避免依赖os.chdir:直接使用绝对路径创建文件夹,无需切换目录,提升代码可靠性:
      # 确定目标目录
      target_dir = os.getcwd() if not new_path else new_path
      for i in range(int(day_to_start), int(day_to_end) + 1):
          folder_path = os.path.join(target_dir, f"Day {i}")
          if os.path.exists(folder_path):
              print(f"Day {i} already exists.")
          else:
              try:
                  os.mkdir(folder_path)
                  print(f"Day {i} created.")
              except Exception as e:
                  print(f"Failed to create Day {i}: {str(e)}")
      

内容的提问来源于stack exchange,提问作者David Young

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:32:42