Разделение большого текстового файла каждые x шаблонов повторяется

Я пытаюсь разбить большой файл каждые x шаблонов без успеха, как я могу это достичь?

Структура файла:

> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS> QWERT ASJDHASDJHASDHASDHASJDHAJDHJHAD> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS> QTRE AGAHDSJHDASJDHASJDHASJHDAJSDHJASHDJASHDJASHJDHASJDHASJDHAJSHDASJHDJASHDJASHDJASHDJASHDJASJDASHDSUHQYWGEYWGYWGQYWDWBCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTS> ASDF ABCDEFGHIJKWERQWEWQYASTRDTAYDGAHSFDTSASHDJASHDJASDHAJSDHAJDHQUHWUDHUHAWUHASUDHUASDHSUDHSU

Он имеет тысячи строк различной длины и несколько строк в заголовке ">". Я хочу разбить этот большой файл на более мелкую фильтрацию каждые 100 ">" заголовков на файл, это возможно сделать?

Спасибо заранее!

1
задан 18 January 2016 в 20:29

1 ответ

Подход Python

Сценарий ниже разбивает имя файла, указанное в командной строке, в файлы, когда определенное число символов > было замечено в начале строки. Количество отображаемых символов также указывается в командной строке. Таким образом, синтаксис выглядит следующим образом:

$ ./split_file.py input.txt 3

Источник скрипта

#!/usr/bin/env python
import sys

def write_split_file(count,orig_name,lines):
    split_name = orig_name + '.split.' + str(count)
    with open(split_name,'w') as fd:
       fd.write("\n".join(lines))

def main():
    counter = 0
    limit = int(sys.argv[2])
    line_list = []
    with open(sys.argv[1]) as fd1:
        for line in fd1:
            line_list.append(line.strip())
            if line.startswith('>'):
               counter+=1
               if counter % limit == 0:
                  write_split_file(counter,sys.argv[1],line_list)
                  line_list = []

    if line_list:          
       write_split_file(counter,sys.argv[1],line_list)

if __name__ == '__main__': main()

Примечание: скрипт написан для Python 2, но совместим с Python 3. Может быть легко изменен для разделения на основе исходной строки переменных.

0
ответ дан 23 May 2018 в 14:12

Другие вопросы по тегам:

Похожие вопросы: