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

