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

批量文件拆分重命名代码报错,求10-K格式文件重命名解决方案

批量拆分重命名10-K文件解决方案

我来帮你搞定这个批量文件处理的需求!针对你提到的文件名格式,我写了一段带容错处理的Python脚本,能自动筛选出filetype为10-k(兼容大小写变体如10-K)的文件,按照要求提取信息并重命名,还能避免原文件丢失、重复文件名覆盖等问题。

实现思路

  1. 遍历目标目录下的所有txt文件
  2. 按下划线拆分文件名,提取关键字段(yearmonth、filetype、cik)
  3. 筛选出filetype匹配10-k的文件,从yearmonth中提取年份
  4. 构造cik-year.txt格式的新文件名,处理重复文件名的情况
  5. 将符合条件的文件复制到指定目录(默认保留原文件,更安全)

完整代码

import os
import shutil

def process_10k_files(source_dir, output_dir=None):
    # 自动创建输出目录,默认在源目录下生成子文件夹存放结果
    if output_dir is None:
        output_dir = os.path.join(source_dir, "processed_10k_files")
        os.makedirs(output_dir, exist_ok=True)
    
    # 遍历源目录下的所有文件
    for filename in os.listdir(source_dir):
        # 仅处理txt格式文件
        if not filename.endswith(".txt"):
            continue
        
        try:
            # 拆分文件名(去掉后缀后按下划线分割)
            name_segments = filename[:-4].split("_")
            # 校验文件名格式是否符合预期
            if len(name_segments) < 5:
                print(f"跳过格式异常文件:{filename}")
                continue
            
            yearmonth = name_segments[0]
            filetype = name_segments[1].lower()  # 转小写,兼容10-K、10-k等写法
            cik = name_segments[4]
            
            # 筛选10-k类型的文件
            if filetype != "10-k":
                continue
            
            # 提取年份(取yearmonth的前4位)
            year = yearmonth[:4]
            # 构造基础新文件名
            base_new_name = f"{cik}-{year}.txt"
            new_file_path = os.path.join(output_dir, base_new_name)
            
            # 处理重复文件名:如果已存在则添加序号
            counter = 1
            while os.path.exists(new_file_path):
                base_new_name = f"{cik}-{year}_{counter}.txt"
                new_file_path = os.path.join(output_dir, base_new_name)
                counter += 1
            
            # 复制原文件到新路径(若需直接重命名原文件,替换为os.rename即可)
            original_path = os.path.join(source_dir, filename)
            shutil.copy(original_path, new_file_path)
            print(f"已完成:{filename} → {base_new_name}")
        
        except Exception as e:
            print(f"处理文件{filename}时出错:{str(e)}")
            continue

# ---------------------- 使用示例 ----------------------
# 替换成你的文件所在目录路径(Windows路径用双反斜杠\\或单斜杠/)
source_directory = "你的目标文件夹路径"
process_10k_files(source_directory)

使用注意事项

  1. 把source_directory替换成你存放所有txt文件的文件夹路径
  2. 默认会在源目录下创建processed_10k_files文件夹,存放处理后的文件(保留原文件,避免误操作丢失数据)
  3. 如果需要直接修改原文件名称,将代码中的shutil.copy替换为os.rename即可
  4. 脚本会自动处理:
    • 格式不符合的文件(跳过并提示)
    • 重复的cik-year文件名(自动添加序号,比如12345-2024_1.txt)
    • 大小写不同的filetype(比如10-K也能被识别)

内容的提问来源于stack exchange,提问作者Lucy Li Chenhui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:47:29