如何修改脚本实现按优先级导入含不同月份名称的文件
解决脚本按优先级匹配月份文件的问题
嘿,这个需求很实用——就是给文件匹配加个优先级 fallback逻辑对吧?咱们可以把目标月份按想要的查找顺序排成列表,依次检查,找到第一个存在的文件就继续后续处理,完美解决找不到最高优先级文件时的运行问题。
核心思路
- 把需要匹配的月份按优先级排序:
September>August>May,放在一个列表里 - 遍历列表,逐个检查对应月份的文件是否存在
- 找到第一个匹配的文件后立刻停止遍历,用这个文件执行后续逻辑
- 加个兜底判断,如果三种文件都找不到,输出明确错误提示,避免脚本直接崩溃
示例脚本(Shell 版本)
假设你原本的脚本是只处理September文件,修改后如下:
# 定义优先级月份列表,顺序就是查找优先级 priority_months=("September" "August" "May") target_file="" # 遍历列表,找第一个存在的文件 for month in "${priority_months[@]}"; do file_pattern="*${month}*.csv" # 检查是否有匹配的文件(重定向输出避免冗余信息) if ls "$file_pattern" 1> /dev/null 2>&1; then target_file="$file_pattern" break fi done # 执行后续逻辑或报错 if [ -n "$target_file" ]; then echo "开始处理文件: $target_file" # 这里替换成你的文件处理代码,比如读取、分析等 # process_data "$target_file" else echo "错误:未找到包含September、August或May的文件" exit 1 fi
示例脚本(Python 版本)
如果你的脚本是用Python写的,逻辑类似:
import glob # 按优先级排列的月份列表 priority_months = ["September", "August", "May"] target_file = None # 遍历查找第一个匹配的文件 for month in priority_months: matched_files = glob.glob(f"*{month}*.csv") if matched_files: # 取第一个匹配的文件(如果有多个可按需调整) target_file = matched_files[0] break if target_file: print(f"找到目标文件:{target_file}") # 这里写你的文件处理逻辑 # with open(target_file, 'r', encoding='utf-8') as f: # content = f.read() else: print("错误:未找到包含指定月份的文件") exit(1)
关键细节说明
- 优先级列表可以随时调整,比如以后要加
July,直接把它放进列表对应位置就行 - Shell版本里用
ls + 重定向判断文件存在,也可以用shopt -s nullglob优化通配符处理 - Python版本里
glob.glob会返回所有匹配的文件,这里取第一个,你也可以根据需求筛选最新的文件等
内容的提问来源于stack exchange,提问作者StatsScared




