繁体   English   中英

如何在python中指定每一行的字符数?

[英]How to specify number of characters in each line in python?

我有一个包含两个基因序列的fasta文件,我要删除的是fasta标头(以“>”开头的行),连接其余各行,并以每行50个字符的长度输出该序列。 我取得了一些进步,但最终被打击了。

这是我的斋戒序列:

>Potrs164783
AGGAAGTGTGAGATTGAAAAAACATTACTATTGAGGAATTTTTGACCAGATCAGAATTGAACCAACATGATGAAGGGGAT
TGTTTGCCATCAGAATATGGCATGAAATTTCTCCCCTAGATCGGTTCAAGCTCCTGTAGGTTTGGAGTCCTTAGTGAGAA
CTTTCTTAAGAGAATCTAATCTGGTCTGTTCCTCGTCATAAGTTAAAGAAAAACTTGAAACAAATAACAAGCATGCATAA
>Potrs164784
TTACCCTCTACCAGCACCAATGCCTATGATCTTACAAAAATCCTTAATAAAAAGAAATCCAAAACCATTGTTACCATTCC
GGAATTACATTCTGAGATAAAAACCCTCAAATCTGAATTACAATCCCTTAAACAAGCCCAACAAAAAGACTCTGCCATAC

我想要的输出是这样的

>conc
AGGAAGTGTGAGATTGAAAAAACATTACTATTGAGGAATTTTTGACCAGA
TCAGAATTGAACCAACATGATGAAGGGGATTGTTTGCCATCAGAATATGG
CATGAAATTTCTCCCCTAGATCGGTTCAAGCTCCTGTAGGTTTGGAGTCC
TTAGTGAGAACTTTCTTAAGAGAATCTAATCTGGTCTGTTCCTCGTCATA
AGTTAAAGAAAAACTTGAAACAAATAACAAGCATGCATAAACCATATGGC
ATTTTGCATCCATTTGTGCATTTCATTTAGTTTACTTGCATTCATTCAGG

到目前为止,我的脚本是

final = list()

with open("test.fa", 'r') as fh_in:
    for line in fh_in:
        line = line.strip()
        if not line.startswith(">"):
            final.append(line)

final2 = "".join(final)

with open("testconcat.fa", 'w') as fh_out:
    fh_out.write(">con")
    fh_out.write("\n")
    fh_out.write(final2)

如何确保每行只写50个字符?

您可以使用内置的textwrap

import textwrap
final2 = "".join(final)
print '\n'.join(textwrap.wrap(final2, 50)

当大的文件时,如果你做的加入,在内存切片等,你可能最终得到奇怪的问题,你会为被消耗相对更多的内存appending每一行,然后splitting他们再次陷入平分块实际上之前写入文件。

我认为避免此类问题的最佳方法是对文件而不是内存进行操作,换句话说,您应该在阅读时同时进行书写。

>>> with open('test.fa', 'r') as r, open('testconcat.fa', 'w') as w:
...     for line in r:
...         if not line.startswith(">"):
...             w.write(line.strip())

>>> with open('testconcat.fa', 'r+') as w:
...     chunk = 50
...     i = 0
...     while next(w, None):
...         w.seek(((i + 1) * chunk) + i)
...         w.write('\n')
...         i = i + 1

>>> cat testconcat.fa
AGGAAGTGTGAGATTGAAAAAACATTACTATTGAGGAATTTTTGACCAGA 
CAGAATTGAACCAACATGATGAAGGGGATTGTTTGCCATCAGAATATGGC
TGAAATTTCTCCCCTAGATCGGTTCAAGCTCCTGTAGGTTTGGAGTCCTT
GTGAGAACTTTCTTAAGAGAATCTAATCTGGTCTGTTCCTCGTCATAAGT
AAAGAAAAACTTGAAACAAATAACAAGCATGCATAATTACCCTCTACCAG
ACCAATGCCTATGATCTTACAAAAATCCTTAATAAAAAGAAATCCAAAAC
ATTGTTACCATTCCGGAATTACATTCTGAGATAAAAACCCTCAAATCTGA
TTACAATCCCTTAAACAAGCCCAACAAAAAGACTCTGCCATAC

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM