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
相关产品推荐
相关产品推荐

