python文件中标记特定字符串位置并写入新文件

原题目是先将a,g替换为r,再将c,t转化为y以后,将rr,yy的出现位置,以及rr,yy出现位置的平均值写入一个新文件。
eg
S=AAGCTTATAGGCCCT → S1=RRRYYYRYRRRYYYY
RR 出现的位置:[1, 2, 9, 10]
YY 出现的位置:[4, 5, 12, 13, 14]
RR出现位置的平均值:
YY出现位置的平均值:
该如何标记RR和YY的位置(并且这里输出的位置标号是指从1开始而不是索引号0开始)


s = 'AAGCTTATAGGCCCT'
s1 = s.replace('A', 'R').replace('G', 'R').replace('C', 'Y').replace('T', 'Y')

rr = []
yy = []
for index in range(len(s1)):
    if s1[index:index+2] == 'RR':
        rr.append(index+1)
    if s1[index:index+2] == 'YY':
        yy.append(index+1)
print(rr, yy)

import  re
import numpy as np

S = 'AAGCTTATAGGCCCT'
##替换
S1 = re.sub('A|G','R',S)
S1 = re.sub('C|T','Y',S1)

#查找位置
index_RR = []
index_YY = []

for i in range(len(S1)):
    if S1[i:i + 2] == 'RR':
        index_RR.append(i + 1)
    if S1[i:i + 2] == 'YY':
        index_YY.append(i + 1)

print(index_RR)
print(index_YY)
##计算均值
index_RR_avg = np.mean(index_RR)
index_YY_avg = np.mean(index_YY)
print(index_RR_avg)
print(index_YY_avg)

#写入文件
with open('result.txt','w+',encoding='utf8') as file:
    str1 = 'RR出现的位置为:'+str(index_RR)+',均值为:'+str(index_RR_avg)
    file.write(str1)
    file.write('\n')

    str2 = 'YY出现的位置为:' + str(index_YY) + ',均值为:' + str(index_YY_avg)
    file.write(str2)


您可以使用 Python 的正则表达式模块 re 来实现这个需求。

首先,您需要使用 re.sub() 方法替换 a,g 为 r,c,t 为 y:

import re

s = 'AAGCTTATAGGCCCT'
s1 = re.sub(r'[ag]', 'r', s)
s1 = re.sub(r'[ct]', 'y', s1)

然后,您可以使用 re.finditer() 方法查找 rr,yy 的出现位置:

rr_pos = []
yy_pos = []
for match in re.finditer(r'rr', s1):
    rr_pos.append(match.start() + 1)  # 注意添加 1,以便从 1 开始标号
for match in re.finditer(r'yy', s1):
    yy_pos.append(match.start() + 1)

最后,您可以使用 mean() 函数计算 rr,yy 出现位置的平均值,然后将它们写入文件:

import statistics

rr_mean = statistics.mean(rr_pos)
yy_mean = statistics.mean(yy_pos)

with open('output.txt', 'w') as f:
    f.write(' '.join(map(str, rr_pos))