由一条含简并碱基的核酸序列生成多条不包含简并碱基的核酸序列

由一条含简并碱基的核酸序列生成多条不包含简并碱基的核酸序列循环遍历返回简并碱基的列表 并把碱基分别添加到 reduce primer 列表的每个核酸序列的末尾

大家好,欢迎来到IT知识分享网。

# 程序目的:由一条含简并碱基的核酸序列生成多条不包含简并碱基的核酸序列。
# 过程:
# 1.遍历每个碱基,查找其是否属于简并碱基,并返回列表(属于简并碱基)或者碱基(不属于简并碱基)。
# 2.如果属于简并碱基。循环遍历返回简并碱基的列表,并把碱基分别添加到reduce_primer列表的每个核酸序列的末尾。新生成的过渡列表list_mid替换原来的reduce_primer列表。
# 3.如果不属于简并碱基。则把返回的非简并碱基分别直接添加到reduce_primer列表的每个核酸序列的末尾。新生成的过渡列表list_mid替换原来的reduce_primer列表。
# 4.如此循环,直至遍历raw_primer完成。
# 5.保存结果到tsv表格。

# 创建一个将简并碱基映射到可能碱基的字典 degeneracy_map = { 'R': ['A', 'G'], 'Y': ['C', 'T'], 'M': ['A', 'C'], 'K': ['G', 'T'], 'S': ['G', 'C'], 'W': ['A', 'T'], 'H': ['A', 'T', 'C'], 'B': ['G', 'T', 'C'], 'V': ['G', 'A', 'C'], 'D': ['G', 'A', 'T'], 'N': ['A', 'T','G', 'C'] } def resolve_degeneracy(degenerate_base): """函数说明:查询输入的碱基是否属于简并碱基,并返回列表(属于简并碱基)或者碱基(不属于简并碱基)""" # 检查碱基是否是简并的 if degenerate_base in degeneracy_map: # 如果是,从映射中选择一个碱基 return degeneracy_map[degenerate_base] else: # 如果不是,直接返回该碱基 return degenerate_base def replace_list(list_A,list_B): """函数说明:删除list_A的所有列表元素,再使用list_B的元素来填充""" list_A.clear() for i in list_B: list_A.append(i) return list_A def gc_content(s): """函数说明:读入DNA序列s,计算s中的GC含量""" s=s.upper() #小写字母转换为大写 gcc = (s.count('C')+s.count('G'))/len(s)*100 return gcc # seq='cCGCTTTAAA' # num=gc_content(seq) # print(num) #40.0 def reduce_primer(primer): """该函数用于还原简并引物,并返回多条简并引物的列表""" primer=primer.upper() #小写字母转换为大写 reduce_primer=[] for i in range(len(primer)): # 遍历引物的每个位置 list_mid=[] #保存新生成核酸序列的过渡列表 if len(resolve_degeneracy(primer[i]))>=2: if i==0: reduce_primer=resolve_degeneracy(primer[i]) # print(reduce_primer) else: for j in resolve_degeneracy(primer[i]): for k in reduce_primer: k+=j list_mid.append(k) replace_list(reduce_primer,list_mid) # print(reduce_primer) else: if i==0: reduce_primer.append(resolve_degeneracy(primer[i])) # print(reduce_primer) else: for k in reduce_primer: k+=resolve_degeneracy(primer[i]) list_mid.append(k) replace_list(reduce_primer,list_mid) # print(reduce_primer) return reduce_primer def raw_list_to_multiple_list(raw_list): """ 函数说明:输入原始列表,返回多重列表。 输入原始列表,查询列表元素(核酸序列)的GC含量,然后把GC含量和列表元素保存到一个过渡列表, 每次循环的过渡列表都加入多重列表multiple_list,最后返回multiple_list。 """ multiple_list=[] for i in raw_list: middle_list=[] GC_percent=gc_content(i) middle_list.append(round(GC_percent,4)) #保留4位小数 middle_list.append(i) multiple_list.append(middle_list) return multiple_list def list_save_as_csv(list_input): import csv """函数说明:把多重列表保存为primer.csv文件""" # 创建CSV文件并打开以供写入数据 with open("primer.csv", mode="w") as file: writer = csv.writer(file) # 写入数据 for i in list_input: writer.writerow(i) # 关闭文件 file.close() raw_primer='TWTTWTTWTTAWA' #输入含简并碱基的原始核酸序列。 primer=reduce_primer(raw_primer) #多条核酸序列的列表,里面的核酸序列不含简并碱基。 print(len(primer)) #查看列表里面序列的条数(全部都是不含简并碱基) # print(primer) multiple_list=raw_list_to_multiple_list(primer) #查询GC含量,并保存为多重列表。[[...],[...]...] # print(multiple_list) #查看GC含量和序列 list_save_as_csv(multiple_list) #多重列表保存为primer.csv文件 

备注:在网上没找到使用python写的该类脚本,故自己写一个并分享出来。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143776.html

(0)
上一篇 2025-05-01 14:15
下一篇 2025-05-01 14:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信