我不是程序员,我是Python的新手,我正在尝试自学......所以,我有一个包含84个条目的文件,如下所示:
1
2
3
X
Y
MT
GL000210.1
我想在包含84条记录的fasta文件中更改所有序列的记录ID。以下是fasta文件的示例:
>name
agatagctagctgatcgatcgatttttttcga
>name1
gagatagatattattttttttttaagagagagcgcgatcgatgc
>name2
agatgctagggc
...
具体来说,我想通过上面示例文件的第一个条目更改第一个记录ID(以“>”开头),依此类推。到目前为止,我创建了以下脚本。我可以逐个更改id,但我不知道同时遍历这两个文件:
from Bio import SeqIO
records = list(SeqIO.parse("new_human_v37.fasta", "fasta"))
modified_record = records[0]
print(modified_record.id.replace("old_name", "first_entry_file1"))
outputfile应如下所示:
>1
agatagctagctgatcgatcgatttttttcga
>2
gagatagatattattttttttttaagagagagcgcgatcgatgc
>3
agatgctagggc
...
有人能帮忙吗?
答案 0 :(得分:3)
您可以这样做(假设第一个文件的行数与第二个文件的行数相同)。如果要生成包含已修改记录的新文件。
from Bio import SeqIO
lines_file = open(my_lines_file, 'r')
fout = open("example.fa", "w")
records = list(SeqIO.parse("new_human_v37.fasta", "fasta"))
for r in records:
line = lines_file.getline()
r.id = line.rstrip()
SeqIO.write(fout, r, 'fasta')
lines_file.close()
fout.close()
答案 1 :(得分:0)
试试这个。
# first create a new file to write into ex: "fasta_file_new.fasta"
# then run the code
fasta_file_new = open("fasta_file_new.fasta", "w")
fasta_file_read = open("new_human_v37.fasta", "r")
replace_lines = open("replacer.txt", "r")
for f in fasta_file_read.readlines():
if f.__contains__(">"):
fasta_file_new.write(">" + replace_lines.readline())
else:
fasta_file_new.write(f)
fasta_file_new.close()
fasta_file_read.close()
replace_lines.close()