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

Python批量重命名文件:将S(i)替换为递增数字求助

文件批量重命名解决方案

问题描述

现有一批格式为SRR3521304001.fastq、SRR3521305001.fastq的文件,需要批量重命名为SRR3521304_S1_L001_R1.fastq、SRR3521305_S2_L001_R1.fastq(其中数字从1开始递增)。

原代码问题分析

你当前的代码存在三个关键问题:

  • 字符串替换时未使用变量格式化:'S{i}_L100_R1_001.fastq'是普通字符串,{i}不会被解析为变量值,需要用f-string实现变量插入。
  • os.system命令语法错误:命令里多余的逗号和空格会导致执行失败,正确的cp命令格式应为cp 源文件 目标文件。
  • 目标格式不符:你写的L100和后缀_001.fastq与需求的L001、.fastq不一致。

修正后的代码

import os

# 获取目录下的文件并按名称排序(确保处理顺序符合预期)
files = sorted(os.listdir('joined_reads'))
i = 1

# 确保目标目录存在,避免报错
os.makedirs('new', exist_ok=True)

for file in files:
    # 只处理.fastq文件,避免误操作其他文件
    if file.endswith('.fastq'):
        # 使用f-string实现变量替换,生成目标文件名
        name = file.replace('001.fastq', f'_S{i}_L001_R1.fastq')
        # 用f-string拼接cp命令,避免字符串拼接错误
        os.system(f'cp joined_reads/{file} new/{name}')
        i += 1

额外优化建议

  • 如果需要直接重命名而非复制文件,可以把os.system换成os.rename(f'joined_reads/{file}', f'new/{name}'),注意先确保目标目录存在。
  • 若文件名排序不符合预期(比如数字排序混乱),可以用自定义排序规则,例如:
    files = sorted(os.listdir('joined_reads'), key=lambda x: int(x[3:-9]))
    
    这个规则会提取文件名中SRR之后、001.fastq之前的数字进行排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:51:12