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

Python批量复制多后缀文件并统一修改为.txt格式实现方法

功能需求
  • 将指定源目录下的文件复制到目标目录,所有迁移完成的文件后缀统一修改为.txt
  • 待处理目录内存在30种以上不固定扩展名(如.ser、.pbr等),无法通过硬编码枚举所有后缀类型
  • 需要支持两种落地场景:
    • 文件复制过程中同步修改后缀
    • 文件全部复制到目标目录后,批量修改后缀
现有已实现代码

路径定义

  • 源目录:src = 'L:/Development/DCS/UL/Dev\202209\1_202206_4355_4359/OUTPUT/202112'
  • 目标目录:trg = 'L:/Development/DCS/UL/Dev/Test Output'

核心复制逻辑

import os
import shutil

files=os.listdir('L:/Development/DCS/UL/Dev/202209/1_202206_4355_4359/OUTPUT/202112')
 
# 遍历源目录下的所有文件
for fname in files:   
    try:
    # 将文件复制到目标目录
        shutil.copy2(os.path.join('L:/Development/DCS/UL/Dev/202209/1_202206_4355_4359/OUTPUT/202112',fname), 'L:/Development/DCS/UL/Dev/Test Output')  
    except:
        print ("error")
    pass
可行实现方案

核心处理逻辑依赖Python标准库os.path.splitext()方法,该方法可以自动拆分任意文件名的主名和扩展名部分,不需要提前枚举所有后缀类型,适配任意扩展名的修改需求。

方案1:复制过程中直接修改后缀(推荐)

该方案不需要额外的二次文件操作,复制时直接写入带.txt后缀的目标文件名,执行效率更高。

import os
import shutil

src = 'L:/Development/DCS/UL/Dev/202209/1_202206_4355_4359/OUTPUT/202112'
trg = 'L:/Development/DCS/UL/Dev/Test Output'

# 目标目录不存在则自动创建
if not os.path.exists(trg):
    os.makedirs(trg)

files = os.listdir(src)
for fname in files:
    src_file_path = os.path.join(src, fname)
    # 跳过子目录,仅处理文件
    if os.path.isfile(src_file_path):
        try:
            # 拆分取主文件名,拼接.txt后缀
            file_main_name = os.path.splitext(fname)[0]
            trg_file_path = os.path.join(trg, f"{file_main_name}.txt")
            shutil.copy2(src_file_path, trg_file_path)
        except Exception as e:
            print(f"处理文件{fname}出错:{str(e)}")

方案2:复制完成后批量修改目标目录后缀

如果需要保留原有复制逻辑,可以在全量文件复制完成后,遍历目标目录下的文件批量重命名修改后缀。

import os
import shutil

src = 'L:/Development/DCS/UL/Dev/202209/1_202206_4355_4359/OUTPUT/202112'
trg = 'L:/Development/DCS/UL/Dev/Test Output'

# 第一步:按原有逻辑复制文件
if not os.path.exists(trg):
    os.makedirs(trg)

files = os.listdir(src)
for fname in files:
    src_file_path = os.path.join(src, fname)
    if os.path.isfile(src_file_path):
        try:
            shutil.copy2(src_file_path, os.path.join(trg, fname))
        except Exception as e:
            print(f"复制文件{fname}出错:{str(e)}")

# 第二步:批量修改目标目录下所有文件后缀
trg_files = os.listdir(trg)
for fname in trg_files:
    trg_file_path = os.path.join(trg, fname)
    if os.path.isfile(trg_file_path):
        try:
            file_main_name = os.path.splitext(fname)[0]
            new_file_path = os.path.join(trg, f"{file_main_name}.txt")
            os.rename(trg_file_path, new_file_path)
        except Exception as e:
            print(f"重命名文件{fname}出错:{str(e)}")

注意事项

  • 两个方案均自动适配任意类型的扩展名,不需要提前硬编码后缀列表,无后缀的文件也会被正常处理为.txt后缀
  • 代码中增加了文件类型判断,不会误处理目标目录下的子文件夹
  • 正式执行前建议先小批量测试,避免文件覆盖、误删等问题

内容的提问来源于stack exchange,提问作者chaservan23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:33:29