You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量按文件名内数字重命名文件 及导入时提取文件名指定数字

解决方案

报错根因

你触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:54:03