Python代码运行无异常但未移动含.bsw.的文件问题求助
问题分析与解决方法
问题根源
你用的source_dir.glob('*.bsw.*')只会遍历当前目录下的文件,不会递归查找多层子文件夹里的内容——那些藏在子目录里的目标文件根本没被找到,自然不会被移动。
修正后的代码
要实现递归查找,有两种简洁的写法:
写法1:用rglob(pathlib专属递归查找方法)
import pathlib import shutil source_dir = pathlib.Path('C:/Data/Main/') target_dir = pathlib.Path('C:/Data/bswdata') # 确保目标目录存在,不存在则自动创建(含父目录) target_dir.mkdir(parents=True, exist_ok=True) # 递归遍历所有子目录,匹配包含.bsw.的文件 for p in source_dir.rglob('*.bsw.*'): shutil.move(p, target_dir / p.name)
写法2:用glob加递归参数
import pathlib import shutil source_dir = pathlib.Path('C:/Data/Main/') target_dir = pathlib.Path('C:/Data/bswdata') target_dir.mkdir(parents=True, exist_ok=True) # **匹配任意层级子目录,recursive=True开启递归查找 for p in source_dir.glob('**/*.bsw.*', recursive=True): shutil.move(p, target_dir / p.name)
额外注意事项
- 原代码缺少
import pathlib和import shutil语句,正式运行时必须加上,否则会触发导入错误。 - 如果不同子目录下存在同名的目标文件,后移动的文件会覆盖先移动的。若要避免覆盖,可以给文件名添加原父目录前缀,比如改为:
target_dir / f"{p.parent.name}_{p.name}"。
内容的提问来源于stack exchange,提问作者INegativeI
相关产品推荐
相关产品推荐

