使用python将文件拆分为许多其他文件

时间:2012-12-26 05:29:53

标签: python python-3.x python-2.7

我有一个文件,我想把它分成许多其他部分。我想使用python代码...

例如:我文件中的数据是这样的

>2165320 21411 200802 8894-,...,765644-
TTCGGAGCTTACTAATTTTAAATATGAAGAATGCCAATATAAGTTTTGATTTCGAAAATACTTTTTTACTAGTTAAAAATTCATGATTTTCTACATCTATAACAATTTGTGTTTTTTTTAAACATCTTCCAGTGTCCTAAGTGTATATTTTTTAACGCAATGTTTGAATACTTTTAGGGTTTACCTTATTTAATTTGATTTTTAATGTGAGTTGTAATCACTGGTGAGCATACTGTTTTTCTTTTGTTCAGTAATATTGCATTTGTAGCTTTTGTATTGCTTAGATATATCACATTAAATCCTTTGTTCAGAAACCCATCCGACAGGGAGTCATAGGTGCCACACTAGTGGTCGAGGATCTAGGATGTCGGAAGGTCAACAATGGGGTAAAACACTAATTTTTTAATTTCTTGTATTTACCAAATTTACTGATTTTGCATTTAGTAGATGGTATATATACTCTTCTACCTTGTACAGTTGATGGTACCTGACTAAATATGTTTTATTTCCTTCTCCAGGATCTTTATGTAGTACGATTCTACAGTCGTCAAGAGGAGGGTAGAAAAGGAGAAGTAAGTTATAATATTTCTGAGCTTTTTTCTTTTTAATTGTTGTTGATAGAAAGTTGTGCCATATACATGTTTTAAGGTGGTGTA

>2165799 14641 135356 16580+,...,680341-
AAGGTAGGAGGTACTCGTGCTAATGGAGGAGCTAATGGTACACCAAACCGACGGCTGTCACTTAATGCTCATCAAAACGGAAGCAGGTCCACAACAAAAGATGGAAAAAAAGACATCAGACCAGTTGCTCCTGTGAATTATGTGGCCATATCAAAAGAAGATGCTGCTTCCCATGTTTCTGGTACCGAACCAATCCCGGCATCACCCTAATAATGAGATCTTCATTATCAACCCTACAATTTCATCTTTGTAGCATGATCAAATACTAGTTACTGCTTTAGGAATTATAATATGGAGTGACAAGTAATTAGAGAGGAACTGTTTTGAGCTGTGTATGTTCAATTTGCCATTTGGAGGTTTTCTCAATACATGTGCCCTTTAATATGAAAATATAGTGCTATTCTTGCCTTTCTCCAAACCCTGGCTCCTCCTATTCATCGGTTTCTT

>2169677 23891 1928391 1298391,…..,739483-
CTAGCTGATCGAGCTGATCGTAGTGAGCTATCGAGCTGACTACTAGCTAGTCGTGATAGCTGATCGAGCTGACTGATGTGCTAGTAGTAGTTTCATGATTTTCTACATCTATAACAATTTGTGTTTTTTTTAAACATCTTCCAGTGTCCTAAGTGTATATTTTTTAACGCAATGTTTGAATACTTTTAGGGTTTACCTTATTTAATTTGATTTTTAATGTGAGTTGTAATCACTGGTGAGCATACTGTTTTTCTTTTGTTCAGTAATATTGCATTTGTAGCTTTTGTATTGCTTAGATATATCACATTAAATCCTTTGTTCAGAAACCCATCCGACAGGGAGTCATAGGTGCCACACTAGTGGTCGAGGATCTAGGATGTCGGAAGGTCAACAATGGGGTAAAACACTAATTTTTTAATTTCTTGTATTTACCAAATTTACTGATTTTGCATTTAGTAGATGGTATATATACTCTTCTACCTTGTACAGTTGATGGTACCTGACTAAATATGTTTTATTTCCTTCTCCAGGATCTTTATGTAGTACGATTCTACAGTCGTCAAGAGGAGGGTAGAAAAGGAGAAGTAAGTTATAATATTTCTGAGCTTTTTTCTTTTTAATTGTTGTTGATAGAAAGTTGTGCCATATACATGTTTTA

等等。

所以现在我想将文件从'>'分割到下一个n将其存储在一个单独的文件中。

与第一个文件一样

>2165320 21411 200802 8894-,...,765644-
TTCG…..GTA    

数据。

第二个文件将

>2165799 14641 135356 16580+,...,680341-
AAGG….GTTTCTT     

数据等。

3 个答案:

答案 0 :(得分:1)

您的数据似乎只是换行符,所以您需要做的就是遍历这些行并将非空白数据写入递增文件:

with open("source.txt") as f:
    counter = 1
    for line in f:
        if not line.strip():
            continue
        with open("out_%03d.txt" % counter, 'w') as out:
            out.write(line)
        counter += 1

这将假设每个组实际上都是一条长线(我不清楚实际格式)。

因为你没有给我们很多关于这个文件的真实格式的解释,所以这是另一个选项,以防这些行应该在同一个文件中的行之间的换行符。如果“@”是新组的实体指示器,我们可以使用它来指示新文件:

with open("source.txt") as f:
    counter = 1
    out = None 

    for line in f:
        if line.lstrip().startswith("@"):
            if out is not None:
                out.close()
            out_name = "out_%03d.txt" % counter
            counter += 1
            out = open(out_name, 'w')

        out.write(line)

    if out is not None:
        out.close()

答案 1 :(得分:1)

要将每个以空行分隔的行组写入单独的文件,您可以使用itertools.groupby()

#!/usr/bin/env python
import sys
from itertools import groupby

def blank(line, mark=[0]):
    if not line.strip(): # blank line
       mark[0] ^= 1 # mark the start of new group
    return mark[0]

for i, (_, group) in enumerate(groupby(sys.stdin, blank), start=1):
    with open("group-%03d.txt" % (i,), "w") as outfile:
        outfile.writelines(group)

用法:

$ python split-on-blank.py < input_file.txt

如果您经常使用此类格式;考虑使用适当的解析器,例如biopython中的Bio.SeqIO.parse()函数提供的。

答案 2 :(得分:0)

with open("source.txt") as f:        
     counter = 1
     for line in f:
        if counter % 3 == 0:
            continue
        with open("out_%03d.txt" % counter, 'w') as out:
            out.write(line)
        counter += 1