如何使用Python将字符串序列格式化为一些预定长度的fasta like header

z9smfwbn  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(120)

我有一个名为input.txt的文本文件,看起来像这样。

A C H E C Q D S S C H H C R Q K L E D T S C H L E D V G K M
N T Y H C G E G I N N G P N A S C K F M L P C V V A E F E N H T
E T D W R C K L E A E H C D C K D A A V N H H F Y S L C K D V T E E W

注意,上面的输入具有3行氨基酸序列。
我有一个名为input.txt的文本文件,它看起来像这样。

A C H E C Q D S S C H H C R Q K L E D T S C H L E D V G K M
N T Y H C G E G I N N G P N A S C K F M L P C V V A E F E N H T
E T D W R C K L E A E H C D C K D A A V N H H F Y S L C K D V T E E W

注意,上面的输入具有3行氨基酸序列。
我想把它转换成下面的格式。

<|endoftext|>
ACHECQDSSCHHCRQKLEDTSCHLEDVGKM
<|endoftext|>
NTYHCGEGINNGPNASCKFMLPCVVAEFEN
HT
<|endoftext|>
ETDWRCKLEAEHCDCKDAAVNHHFYSLCKD
VTEEW

氨基酸序列的每一个开始都应该以这个字符串“〈|内文|〉”,并且每个新行应不超过30个氨基酸。
我有这样的代码,但它不做的工作:

def process_amino_acids(file_name):
    with open(file_name, "r") as file:
        data = file.read().replace("\n", "").replace(" ", "")

    output = "<|endoftext|>"
    for i, amino_acid in enumerate(data):
        if i % 30 == 0 and i != 0:
            output += "\n"
        output += amino_acid
    return output

def main():
    input_file = "data/input.txt"
    processed_amino_acids = process_amino_acids(input_file)

    with open("data/output.txt", "w") as output_file:
        output_file.write(processed_amino_acids)

    print("Formatted amino acid sequences are written to output.txt")

if __name__ == "__main__":
    main()

它给出的输出是这样的:

<|endoftext|>ACHECQDSSCHHCRQKLEDTSCHLEDVGKM
NTYHCGEGINNGPNASCKFMLPCVVAEFEN
HTETDWRCKLEAEHCDCKDAAVNHHFYSLC
KDVTEEW

如何正确使用Python?

mum43rcc

mum43rcc1#

Python自带电池,使用textwrap.wrap

from textwrap import wrap

with (open('input.txt') as f,
      open('output.txt', 'w') as out
     ):
    for line in f:
        line = line.replace(' ', '')
        out.write('<|endoftext|>\n')
        out.write('\n'.join(wrap(line, width=30)))
        out.write('\n')

输出文件:

<|endoftext|>
ACHECQDSSCHHCRQKLEDTSCHLEDVGKM
<|endoftext|>
NTYHCGEGINNGPNASCKFMLPCVVAEFEN
HT
<|endoftext|>
ETDWRCKLEAEHCDCKDAAVNHHFYSLCKD
VTEEW

相关问题