使用 BioPython 将 FASTA seq_ID 替换为字典中的新 ID
replace FASTA seq_ID with new ID from dict using BioPython
我有一个很大的文件,里面有很多 FASTA 序列。其中一些需要重命名——我正在尝试用它们的更新版本替换 FASTA 序列 ID。我将信息存储在字典中,旧 ID 是键,新 ID 是值。无论我做什么,我似乎都无法替换 ID 或正确编写新的 fasta 文件。我正在使用 SeqIO 读取我的 fasta 文件。这是我的一些代码:
这会产生记录 ID 的浅层替换,因为它们在此处准确打印,但实际上并没有在文件本身中更改:
rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT',
'428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}
with open('fasta.fsa') as f:
for seq_record in SeqIO.parse(f, 'fasta'):
for k,v in rename_fastas.items():
if seq_record.id == k:
seq_record.id = seq_record.description = seq_record.id.replace(k,v)
print(seq_record.id)
这让我的新文件中的条目太多了:
with open('fasta.fsa') as original,
open('fasta2.fsa', 'w') as corrected:
records = SeqIO.parse(original, 'fasta')
for record in records:
for k, v in rename_fastas.items():
if record.id == k:
record.id = record.description.replace(k, v)
else:
record.id = record.id
SeqIO.write(record, corrected, 'fasta')
这也不起作用,我不确定为什么:
with open('fasta.fsa') as f:
for seq_record in SeqIO.parse(f, 'fasta'):
seq_record.id = seq_record.description = seq_record.id.replace('428PBMC','428_PBMC')
seq_record.id = seq_record.description = seq_record.id.replace('446_was_445','446')
yield seq_record
如有任何帮助,我们将不胜感激!
试试那个:
rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT', '428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}
with open('fasta.fsa') as original, open('fasta2.fsa', 'w') as corrected:
for seq_record in SeqIO.parse(original, 'fasta'):
if seq_record.id in rename_fastas:
seq_record.id = seq_record.description = rename_fastas[seq_record.id]
SeqIO.write(seq_record, corrected, 'fasta')
您打开文件进行输入和输出。你有一个带有正确键的字典,所以不需要每次都遍历它,只需要让字典完成它的工作并通过它的键访问它。如果密钥存在于字典中,则用 ID 的整个值替换字典中的值。最后将修正后的记录写入输出文件。
我有一个很大的文件,里面有很多 FASTA 序列。其中一些需要重命名——我正在尝试用它们的更新版本替换 FASTA 序列 ID。我将信息存储在字典中,旧 ID 是键,新 ID 是值。无论我做什么,我似乎都无法替换 ID 或正确编写新的 fasta 文件。我正在使用 SeqIO 读取我的 fasta 文件。这是我的一些代码:
这会产生记录 ID 的浅层替换,因为它们在此处准确打印,但实际上并没有在文件本身中更改:
rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT',
'428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}
with open('fasta.fsa') as f:
for seq_record in SeqIO.parse(f, 'fasta'):
for k,v in rename_fastas.items():
if seq_record.id == k:
seq_record.id = seq_record.description = seq_record.id.replace(k,v)
print(seq_record.id)
这让我的新文件中的条目太多了:
with open('fasta.fsa') as original,
open('fasta2.fsa', 'w') as corrected:
records = SeqIO.parse(original, 'fasta')
for record in records:
for k, v in rename_fastas.items():
if record.id == k:
record.id = record.description.replace(k, v)
else:
record.id = record.id
SeqIO.write(record, corrected, 'fasta')
这也不起作用,我不确定为什么:
with open('fasta.fsa') as f:
for seq_record in SeqIO.parse(f, 'fasta'):
seq_record.id = seq_record.description = seq_record.id.replace('428PBMC','428_PBMC')
seq_record.id = seq_record.description = seq_record.id.replace('446_was_445','446')
yield seq_record
如有任何帮助,我们将不胜感激!
试试那个:
rename_fastas = {'446_was_445_cDNA_v01VT':'446_cDNA_v01VT', '446_was_445_cDNA_v03VT': '446_cDNA_v03VT', '428PBMC_2_V3': '428_PBMC_2_V3', '428PBMC_3_V3': '428_PBMC_3_V3', '428PBMC_4_V3': '428_PBMC_4_V3', '428PBMC_5_V3': '428_PBMC_5_V3'}
with open('fasta.fsa') as original, open('fasta2.fsa', 'w') as corrected:
for seq_record in SeqIO.parse(original, 'fasta'):
if seq_record.id in rename_fastas:
seq_record.id = seq_record.description = rename_fastas[seq_record.id]
SeqIO.write(seq_record, corrected, 'fasta')
您打开文件进行输入和输出。你有一个带有正确键的字典,所以不需要每次都遍历它,只需要让字典完成它的工作并通过它的键访问它。如果密钥存在于字典中,则用 ID 的整个值替换字典中的值。最后将修正后的记录写入输出文件。