gpt4 book ai didi

python - 如何在不使用biopython的情况下将多行fasta文件转换为单行fasta文件

转载 作者:行者123 更新时间:2023-12-01 01:49:44 28 4
gpt4 key购买 nike

我有几个大的 fasta 文件,其中序列保存在多行中。

>header1
AGTCGTAGCTACGTACGTACGTGTACGTACGTA
TGACGTACGTAGCTGCATGCTA
>header2
TGCAGATCGTAGTCGATGCTAGTGCATGCATGT
ACGTAGTGCAG
...

我想将其转换为 fasta 文件,其中序列组合成一行。

>header1
AGTCGTAGCTACGTACGTACGTGTACGTACGTATGACGTACGTAGCTGCATGCTA
>header2
TGCAGATCGTAGTCGATGCTAGTGCATGCATGTACGTAGTGCAG
...

我的 fasta 文件非常大,因此我需要一种节省内存的方法(因为序列文件比我的内存大)。因此我无法使用 Biopython (下面有一个解决我的 Biopython 问题的解决方案,以防这对任何人有帮助,这是来自 Biostars )。

from Bio import SeqIO
import re

def multi2linefasta(indir,outdir,filelist):
for items in filelist:
mfasta = outdir +"/"+re.sub('\..*','',items)+'_twoline.fasta'
ifile = open(indir+'/'+items,'rU')
with open(mfasta, 'w') as ofile:
for record in SeqIO.parse(ifile, "fasta"):
sequence = str(record.seq)
ofile.write('>'+record.id+'\n'+sequence+'\n')

最佳答案

以下命令将一次一行处理您的文件:

with open('input.fasta') as f_input, open('output.fasta', 'w') as f_output:
block = []

for line in f_input:
if line.startswith('>header'):
if block:
f_output.write(''.join(block) + '\n')
block = []
f_output.write(line)
else:
block.append(line.strip())

if block:
f_output.write(''.join(block) + '\n')

给你一个output.fasta,其中包含:

>header1
AGTCGTAGCTACGTACGTACGTGTACGTACGTATGACGTACGTAGCTGCATGCTA
>header2
TGCAGATCGTAGTCGATGCTAGTGCATGCATGTACGTAGTGCAG

关于python - 如何在不使用biopython的情况下将多行fasta文件转换为单行fasta文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856538/

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