![](/img/trans.png)
[英]Replace DNA nucleotide at given position in DNA sequence using for loop
[英]replace a nucleotide at a certain position in a dna sequence file
我有一個fasta文件,另一個文件包含位置,我想用默認設置替換每個序列的某個位置,例如,我的位置文件看起來像a / c 120,我的替換表看起來像a / c到W,所以我想獲得一個新的fasta文件,位置120替換為w。
該程序是用Python編寫的
因此,第一個問題是我無法到達正確的位置,例如,如果我使用my_seq_id [0:3],則會得到序列名稱! 不是順序。 位置文件看起來像id1 219 A / C
from Bio import SeqIO
import sys
import string
userInput1=raw_input("enter your sequence:")
userInput2=raw_input('enter your position file:')
fasta_file=userInput1
position_file=userInput2
result_file="outfile.txt"
id_list=list()
position_list=list()
nucleotide_list=list()
with open(position_file) as f:
for line in f:
line=line.strip()
headerline = line.split()
position=headerline[1]
ID=headerline[0]
nucleotide=headerline[2]
nucleotide_list.add(nucleotide)
position_list.add(position)
id_list.add(ID)
fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta')
with open(result_file, 'w') as f:
if seq_record.id in wanted and nucleotide_list="A/C":
seq_record[position_list]="W\n"
SeqIO.write([seq_record], f, "fasta")
您的代碼有些混亂,不應:
fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta')
with open(result_file, 'w') as f:
if seq_record.id in wanted and nucleotide_list="A/C":
seq_record[position_list]="W\n"
SeqIO.write([seq_record], f, "fasta")
是:
fasta_sequence=SeqIO.parse(open(fasta_file), 'fasta')
with open(result_file, 'w') as f:
if fasta_sequence[j].id in wanted and nucleotide_list[i]=="A/C":
fasta_sequence[j].seq[position_list]="W\n"
SeqIO.write([fasta_sequence[j]], f, "fasta")
作為我的計數器來通過nucleotide_list和j來通過fasta_sequence
您還可以執行以下操作,通過fasta_sequence進行迭代:
for record in SeqIO.parse(StringIO(data), "fasta"):
print("%s %s" % (record.id, record.seq))
作為id每個元素的id並按順序排列。
----更新----
我想我了解您想要做什么,請檢查文件中的每個記錄,檢查id是否匹配,然后在該位置更改順序:
#goes through each record in the file
for record in SeqIO.parse(StringIO(data), "fasta"):
# check if id is wanted
if record.id in id_list:
# get list of every item in id_list that matches record.id
positions_of_id_in_id_list = [i for i, j in enumerate(id_list) if j == record.id]
for elem_position_lists in positions_of_id_in_id_list:
# I think here you want to write the new record in the correct position (substitute "W\n" with new item. Maybe nucleotide[elem_position_lists]?)
record.seq[position_list[elem_position_lists]] = "W\n"
# write new file
SeqIO.write(fasta_sequence, f, "fasta")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.