如何用Python通过文件名部分匹配实现文件移动?
解决方案:用通配符匹配动态文件名实现自动移动
Python的shutil.move本身不支持通配符,但可以搭配glob模块实现这个需求——glob专门用来处理文件路径的模式匹配,能帮你找到符合filename_*这类格式的文件。
基础实现(固定目标文件名)
下面是适配你需求的修改后代码,每天只会匹配到一个带日期后缀的文件,然后移动并重命名为固定名称:
import shutil import glob # 定义带通配符的源路径模式 source_pattern = "/Users/Me/LocationA/filename_*.txt" # 获取所有匹配的文件列表 matched_files = glob.glob(source_pattern) # 处理匹配结果 if matched_files: # 取第一个匹配到的文件(每日仅生成一个的情况下) source_file = matched_files[0] # 目标路径(固定文件名) destination = "/Users/Me/LocationB/nameofmyfile.txt" # 执行移动操作 shutil.move(source_file, destination) else: print("未找到符合条件的文件")
可选:保留原文件名移动
如果希望保留原有的日期后缀文件名,只是把文件移动到目标目录,可以这样写:
import os import shutil import glob source_pattern = "/Users/Me/LocationA/filename_*.txt" matched_files = glob.glob(source_pattern) # 目标目录路径 destination_dir = "/Users/Me/LocationB/" if matched_files: for source_file in matched_files: # 提取原文件名 filename = os.path.basename(source_file) # 拼接目标文件的完整路径 destination = os.path.join(destination_dir, filename) shutil.move(source_file, destination) else: print("未找到符合条件的文件")
关键说明
glob.glob()会返回所有匹配指定模式的文件路径列表,*是通配符,代表任意长度的任意字符。- 如果你的环境偶尔会生成多个符合模式的文件,建议在代码里加判断(比如检查列表长度),避免误操作。
- 配合cron调度时,确保Python脚本有足够的权限访问源目录和目标目录。
内容的提问来源于stack exchange,提问作者Jayson Roberts
相关产品推荐
相关产品推荐

