使用glob编写文件重命名脚本时遇NameError: name 'my_gfile'未定义
问题分析与修正方案
错误根源
- 变量作用域问题:
my_gfile是for循环的局部变量,仅在循环内部有效,循环外调用必然触发NameError。 - 逻辑位置错误:重命名相关代码放在循环外,无法遍历处理每个匹配到的文件。
- 格式字符串错误:
strftime('%Y%m%d"')里多了转义双引号",会导致文件名包含多余引号。 - 文件名冗余:原文件已是
.csv后缀,直接拼接会生成xxx.csv20240520.csv这类错误文件名。
修正后的代码
from datetime import datetime import os import glob # 遍历所有匹配的CSV文件 for my_gfile in glob.glob('/root/files/SEN*.csv'): print(my_gfile) # 生成纯净的日期字符串 date_string = datetime.today().strftime('%Y%m%d') # 分离原文件名与后缀,避免重复添加.csv file_path, file_ext = os.path.splitext(my_gfile) # 构造规范的新文件名 new_name = f"{file_path}_{date_string}{file_ext}" # 执行重命名操作 os.rename(my_gfile, new_name)
核心修改点
- 将所有文件处理逻辑(日期生成、新文件名构造、重命名)移入
for循环内部,确保每个匹配文件都能被处理。 - 移除
date_string中的多余转义引号,保证日期格式正确。 - 使用
os.path.splitext分离文件名与后缀,避免生成重复后缀的错误文件名。 - 用f-string简化新文件名拼接,提升代码可读性。
内容的提问来源于stack exchange,提问作者Rex Skys
相关产品推荐
相关产品推荐

