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
相关产品推荐
相关产品推荐

