gpt4 book ai didi

python - 在 Python 的 ASCII 文件中查找/替换带注释的子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:46 25 4
gpt4 key购买 nike

我在从事的生物信息学项目中遇到了一些编码问题。基本上,我的任务是从数据库中提取基序序列,并使用该信息来注释序列比对文件。比对文件是纯文本,因此注释不会很复杂,最多只是用比对文件本身中的星号替换提取的序列。

我有一个脚本可以扫描数据库文件,提取我需要的所有序列,并将它们写入输出文件。我需要的是,给定一个查询,读取这些序列并将它们与 ASCII 比对文件中相应的子字符串匹配。最后,对于主题序列(非常大的字符串的子串)的每次出现,我将用星号序列 * 替换主题序列 XXXXXXX。

我使用的代码是这样的(11SGLOBULIN 是数据库中蛋白质条目的名称):

motif_file = open('/users/myfolder/final motifs_11SGLOBULIN','r')
align_file = open('/Users/myfolder/alignmentfiles/11sglobulin.seqs', 'w+')
finalmotifs = motif_file.readlines()
seqalign = align_file.readlines()


for line in seqalign:
if motif[i] in seqalign: # I have stored all motifs in a list called "motif"
replace(motif, '*****')

但它并没有用星号序列替换每个字符串,而是删除了整个文件。任何人都可以看到为什么会这样吗?

我怀疑问题可能在于我的 ASCII 文件基本上只是一个很长的氨基酸列表,而 Python 不知道如何替换隐藏在很长字符串中的特定子字符串。

最佳答案

像下面这样的东西应该可以解决问题。我对您的输入数据做了假设,因为您没有发布示例并且您正在运行 python 2.7。

motifs = [ x.strip() for x in open('final motifs_11SGLOBULIN','r') ]
redact = '*****'

with open('11sglobulin.seqs','r') as data_in, open('11sglobulin.seqs.new','w') as data_out:
for seq in data_in:
for motif in motifs:
while True:
x = seq.find(motif)
if x >= 0:
seq = seq[:x] + redact + seq[x+len(motif):]
else:
break
data_out.write(seq)

关于python - 在 Python 的 ASCII 文件中查找/替换带注释的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5870012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com