如何批量按文件名内数字重命名文件 及导入时提取文件名指定数字
解决方案
报错根因
你触发ValueError: invalid literal for int() with base 10的核心原因是:当前代码直接将去除后缀的完整文件名尝试转换为整数,但你的文件名是多段下划线分隔的字符串(示例见下图),无法直接转换。
按数字顺序读取+自定义命名
使用正则精准提取文件名中的目标数字,提取完成后先排序再读取即可,同时支持自定义区间过滤,修改后的代码如下:
# import libraries import pandas as pd import os import re import matplotlib.pyplot as plt import numpy as np from pathlib import Path data_location = r'C:\Users\...\Characterization_OPO\Data' data_folder = Path(data_location) data = {} file_with_wavelength = [] # 第一步:遍历所有文件提取目标数字 for file in data_folder.glob('*'): if file.is_file(): file_name = file.name # 正则匹配文件名末尾最后一段数字(即你需要的波长值) match_res = re.search(r'_(\d+)\.[^.]+$', file_name) if match_res: wavelength = int(match_res.group(1)) file_with_wavelength.append((wavelength, file)) # 第二步:按数字从小到大排序 file_with_wavelength.sort(key=lambda x:x[0]) # 第三步:读取文件,支持区间过滤(示例为230到290的范围,不需要可删除if判断) min_wl = 230 max_wl = 290 for wavelength, file in file_with_wavelength: if not (min_wl <= wavelength <= max_wl): continue tmp = pd.read_csv(file, skiprows=20, skipfooter=59, index_col="PixelNo", engine='python') data[f'{wavelength} nm'] = tmp
高效批量重命名文件为对应数字
在上述提取数字的基础上增加重命名逻辑即可,执行前建议先备份原文件避免误操作:
# 批量重命名代码 for wavelength, file in file_with_wavelength: suffix = file.suffix new_name = f"{wavelength}{suffix}" new_path = file.parent / new_name # 自动处理重名问题,避免覆盖文件 counter = 1 while new_path.exists(): new_name = f"{wavelength}_{counter}{suffix}" new_path = file.parent / new_name counter +=1 file.rename(new_path)
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

