Python批量将指定文件名图片移动至目标目录
本文演示如何利用Python内置的os与shutil库,通过获取参考目录文件名、拼接源文件路径并调用移动函数,实现将大文件夹中特定图片快速迁移至独立目标目录。代码已整合循环遍历、异常捕获与执行状态统计,保障批量操作的安全与可追溯。
实现逻辑与前置准备
该需求的核心在于建立参照物与目标物之间的映射关系。以精修图文件夹为基准,提取其文件名称后,直接在原始照片总文件夹中寻找同名文件,并将其转移至独立的目标目录中即可完成验收归档。
运行环境要求Python 3.6及以上版本,系统支持Windows、macOS或Linux。全程仅依赖标准库os与shutil,无需安装第三方插件。
操作步骤与完整代码
⚠️ 风险提示:使用shutil.move会直接从源目录移除文件。在执行批量移动前,请务必对原始文件夹进行完整备份,并在测试环境确认路径无误后再投入正式使用。
第1步:提取参考目录的文件列表
目的:获取用于匹配的参照文件名集合。
入口:使用os.listdir()传入参考图片所在的根目录路径。
动作:该函数将返回目录下所有文件和子目录的名称列表。本例聚焦于图片匹配,直接使用此列表作为遍历基准。
第2步:拼接源文件绝对路径
目的:构造源文件夹中待移动文件的完整磁盘路径,避免手动拼接引号或反斜杠导致的语法错误。
入口:os.path.join()结合源目录路径与单张参考文件名。
动作:将两者组合成形如D:\源文件夹\1.png的绝对路径。此步骤无需额外搜索遍历,直接基于命名一致性定位文件。
第3步:执行移动并统计执行状态
目的:完成物理文件搬迁,并通过异常处理机制过滤无效匹配,最终输出成功与失败的详细清单。
入口:shutil.move(src_file, dst_file)配合for循环与try...except语句块。
动作:依次尝试移动每个文件。成功则累加计数并打印日志;失败(如文件已存在冲突、权限不足或原文件缺失)则记录报错文件名并继续遍历。循环结束后统一汇总统计结果。
import os
import shutil
# 配置参数区域(请根据实际环境修改路径)
trim_catalog = r'D:\精修图' # 参考文件所在目录
src_catalog = r'D:\源文件夹' # 原始大批量图片目录
dst_catalog = r'D:\源文件夹\目标图' # 目标存放目录
# 第1步:获取参考文件名列表
if not os.path.isdir(trim_catalog):
raise FileNotFoundError(f"参考目录不存在:{trim_catalog}")
trim_files = os.listdir(trim_catalog)
print(f"共找到 {len(trim_files)} 个待匹配文件。")
# 初始化统计变量
suc_no = 0
err_no = 0
err_file_name = []
# 第2、3步:遍历、拼接路径、执行移动并记录状态
for trim_file in trim_files:
# 拼接源文件绝对路径
src_file = os.path.join(src_catalog, trim_file)
# 确保源文件真实存在,跳过可能由空目录带来的无效路径
if not os.path.exists(src_file):
err_no += 1
err_file_name.append(trim_file)
print(f"跳过:未在源目录找到 {trim_file}")
continue
# 拼接目标文件绝对路径
dst_file = os.path.join(dst_catalog, trim_file)
# 执行移动操作
try:
shutil.move(src_file, dst_file)
print(f"成功移动:{trim_file}")
suc_no += 1
except Exception as e:
err_no += 1
err_file_name.append(trim_file)
print(f"移动失败 {trim_file}:{e}")
# 第3步:输出最终执行报告
if err_no > 0:
fail_list = '、'.join(err_file_name)
print(f'\n【执行报告】成功 {suc_no} 个,失败 {err_no} 个。失败文件:{fail_list}')
else:
print(f'\n【执行报告】全部成功完成,共计移动 {suc_no} 个文件。')
验证测试与结果对照
准备测试环境:在「源文件夹」内放置多张原始图片,同时将其中三张复制至「精修图」目录作为匹配基准。

首次执行脚本,控制台输出显示所有匹配项均被识别并完成迁移,无异常中断。

二次测试引入偏差:将「精修图」中的一张图片重命名为带后缀的格式(如将 7.png 改为 7-1.png),同时把已移入目标目录的文件还原回源文件夹。此时参考名与源文件名出现不匹配。

重新运行代码,脚本自动拦截无法找到的文件,并在结尾打印详细的失败清单,便于人工核对后续处理。

常见问题排查
- 路径分隔符兼容性:代码中使用的是Windows风格的反斜杠转义路径。若在macOS或Linux环境下运行,可直接替换为标准正斜杠
/,或统一使用pathlib.Path模块处理跨平台兼容。 - 目标目录不存在:
shutil.move不会自动创建中间层文件夹。若dst_catalog路径未预先新建,需在调用移动前先使用os.makedirs(dst_catalog, exist_ok=True)。 - 同名文件冲突:若目标文件夹内已存在同名文件,部分系统会触发权限报错或强制覆盖。建议在代码中加入
os.path.exists(dst_file)预判逻辑以自定义覆盖策略。
核心函数说明
os.listdir(path):返回指定路径下的所有条目名称列表,适用于快速获取文件清单。注意不包含隐藏文件(视系统而定)及子目录的递归展开。
os.path.join(dir, name):智能拼接操作系统对应的文件路径,有效规避手写字符串时遗漏斜杠或引号的常见错误。
shutil.move(src, dst):底层封装了文件拷贝与删除逻辑。当源与目标位于同一磁盘分区时,执行的是高效的原子级重命名操作;跨盘区则会触发全量复制后清理源文件。
以上就是Python实现移动指定图片到指定目录的详细内容,更多关于Python批量处理文件操作的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













