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

Python脚本重命名文件夹时触发OSError无效参数错误求助

解决os.rename的无效参数错误

首先看你的报错信息:

OSError: [Errno 22] Invalid argument: '/mainfs/scratch/ah/Datasets_sample/raw/2018/fk180731/tuna_sand/20180811_153727_ts_un6k_NEW/image/i20180811_153727' -> 'i20180811_153727_original'

问题出在这两个核心点:

1. 不必要的工作目录切换引发路径混乱

你在get_file_list里执行了os.chdir(path),这会把当前工作目录直接切换到你要重命名的目标文件夹内部。此时调用os.rename时,第二个参数os.path.basename(path)+"_original"是相对路径,相当于要把原文件夹(绝对路径指向的目录)重命名到它自己的内部,这是系统不允许的操作,直接触发无效参数错误。

2. 目标路径构造逻辑错误

就算没有切换工作目录,直接用os.path.basename(path)+"_original"作为目标路径,也会把文件夹重命名到当前脚本的工作目录下,而不是原文件夹的父目录下,完全不符合你“在原位置重命名”的预期。

修正后的完整代码

import glob, os
import shutil

path = input("Path to directory containing the dataset: ")
ext = input("Extension of the dataset (eg. txt): ")
data_files = []

def get_file_list():
    # 移除不必要的目录切换,直接用绝对路径匹配文件
    for file in glob.glob(os.path.join(path, f"*.{ext}")):
        data_files.append(file)
    data_length = len(data_files)
    print(f"Total files with extension *.{ext} found: {data_length}")
    batch_size = input("Please enter the required batch size: ")
    folder_rename()

def folder_rename():
    data_folder_name = os.path.basename(path)
    print("Original dataset folder path: ")
    print(path)
    # 构造合法的目标路径:原父目录 + 新文件夹名
    new_folder_path = os.path.join(os.path.dirname(path), f"{data_folder_name}_original")
    os.rename(path, new_folder_path)
    print(f"Original dataset folder renamed to: {data_folder_name}_original" )
    print(f"Original dataset new path is: {new_folder_path}")

# 启动执行
get_file_list()

关键改动说明

  • 删掉os.chdir(path):通过os.path.join(path, f"*.{ext}")让glob直接匹配目标文件夹下的指定扩展名文件,彻底避免路径混乱问题。
  • 重构目标路径:用os.path.dirname(path)获取原文件夹的父目录,再通过os.path.join拼接新的文件夹名,确保重命名操作在原位置完成,路径参数完全符合系统要求。

这样修改后,脚本就能正确将目标文件夹重命名为foldername_original,不会再出现无效参数的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:57:48