pathlib replace()无法移动已存在目录的问题求助
解决pathlib.replace移动目录时的FileNotFoundError问题
问题核心原因
你遇到的报错本质是目标路径的父目录不存在。pathlib.Path.replace() 方法和底层的 os.rename() 逻辑一致,不会自动创建目标路径的上级目录。如果 /home/me/output/12345-12345/PASS 这个目录不存在,直接调用replace就会触发FileNotFoundError,哪怕源目录确实存在。
修复步骤
在执行移动操作前,先创建目标路径的父目录:
source_dir = pathlib.Path('/home/me/output/12345-12345/RUNNING/20231018T160743') dest_dir = pathlib.Path('/home/me/output/12345-12345/PASS/20231018T160743') # 确保目标父目录存在,parents=True会递归创建上级目录,exist_ok=True避免已存在时报错 dest_dir.parent.mkdir(parents=True, exist_ok=True) source_dir.replace(dest_dir)
其他排查方向(如果上述方法无效)
- 检查源目录和目标目录是否在不同文件系统:
replace()本质是原子重命名,跨文件系统时无法直接完成,需要用shutil.move()替代。 - 验证目录权限:确保当前用户对源目录、目标父目录有读写和执行权限。
- 再次确认无残留的打开文件句柄:可以用
lsof +D /home/me/output/12345-12345/RUNNING/20231018T160743命令在终端检查是否有其他进程占用该目录下的文件。
内容的提问来源于stack exchange,提问作者JS.
相关产品推荐
相关产品推荐

