写一个fasta id替换代码,其中新id在txt文件 新id内容包含旧id
时间: 2024-03-27 20:40:58 浏览: 46
下面是一个用Python编写的Fasta ID替换代码,其中新ID存储在一个txt文件中,并且新ID文件中包含旧ID:
```python
import os
fasta_file = "input.fasta"
new_id_file = "new_ids.txt"
if not os.path.exists(fasta_file):
print("Error: Fasta file does not exist!")
exit()
if not os.path.exists(new_id_file):
print("Error: New ID file does not exist!")
exit()
new_ids = {}
try:
with open(new_id_file, "r") as f:
for line in f:
old_id, new_id = line.strip().split()
new_ids[old_id] = new_id
except:
print("Error: Failed to read new ID file!")
exit()
try:
with open(fasta_file, "r") as f:
lines = f.readlines()
except:
print("Error: Failed to read fasta file!")
exit()
new_lines = []
for line in lines:
if line.startswith(">"):
old_id = line.strip().lstrip(">")
if old_id in new_ids:
new_id = new_ids[old_id]
new_lines.append(">{}\n".format(new_id))
else:
new_lines.append(line)
else:
new_lines.append(line)
output_file = "output.fasta"
with open(output_file, "w") as f:
f.writelines(new_lines)
print("Done!")
```
在这个代码中,我们首先检查输入的FASTA文件和新ID文件是否存在。如果存在,我们读取新ID文件并将新ID存储在一个字典中,其中旧ID作为字典中的键,新ID作为值。然后,我们读取FASTA文件,逐行扫描每条序列。对于每个标题行,我们提取出旧ID并查找对应的新ID,如果找到就用新ID替换旧ID。新的标题行和序列行都被添加到一个新的列表中。最后,我们将新的FASTA文件写入输出文件中。
请注意,新ID文件应该按照旧ID和新ID之间的空格分隔每一行。例如:
```
old_id1 new_id1
old_id2 new_id2
old_id3 new_id3
```
同时,如果新ID文件中包含的旧ID在FASTA文件中不存在,则不会进行替换,而是使用原始的旧ID。
阅读全文