Изменение содержимого текстового файла и создание нового файла с таким же форматом

1

У меня большой текстовый файл с большим количеством деталей. Каждая часть имеет 4 строки, и следующая часть начинается сразу после последней части. first line каждой части начинается с @, 2nd line - это sequence символов, 3rd line - + а 4th line - sequence of characters.

Небольшой пример:

@M00872:462:000000000-D47VR:1:1101:15294:1338 1:N:0:ACATCG
TGCTCGGTGTATGTAAACTTCCGACTTCAACTGTATAGGGATCCAATTTTGACAAAATATTAACGCTTATCGATAAAATTTTGAATTTTGTAACTTGTTTTTGTAATTCTTTAGTTTGTATGTCTGTTGCTATTATGTCTACTATTCTTTCCCCTGCACTGTACCCCCCAATCCCCCCTTTTCTTTTAAAAGTTAACCGATACCGTCGAGATCCGTTCACTAATCGAACGGATCTGTCTCTGTCTCTCTC
+
BAABBADBBBFFGGGGGGGGGGGGGGGHHGHHGH55FB3A3GGH3ADG5FAAFEGHHFFEFHD5AEG1EF511F1?GFH3@BFADGD55F?@GFHFGGFCGG/GHGHHHHHHHDBG4E?FB?BGHHHHHHHHHHHHHHHHHFHHHHHHHHHGHGHGHHHHHFHHHHHGGGGHHHHGGGGHHHHHHHGHGHHHHHHFGHCFGGGHGGGGGGGGFGGEGBFGGGGGGGGGFGGGGFFB9/BFFFFFFFFFF/

Я хочу изменить вторую и четвертую строки каждой части и создать новый файл с аналогичной структурой (по 4 строки для каждой части). На самом деле я хочу сохранить первые 65 символов (в строках 2 и 4) и удалить остальные символы. Ожидаемый результат для небольшого примера будет выглядеть так:

@M00872:462:000000000-D47VR:1:1101:15294:1338 1:N:0:ACATCG
TGCTCGGTGTATGTAAACTTCCGACTTCAACTGTATAGGGATCCAATTTTGACAAAATATTAACG
+
BAABBADBBBFFGGGGGGGGGGGGGGGHHGHHGH55FB3A3GGH3ADG5FAAFEGHHFFEFHD5A

Я написал следующий код:

infile = open("file.fastq", "r")
new_line=[]
for line_number in len(infile.readlines()):
    if line_number ==2 or line_number ==4:
        new_line.append(infile[line_number])

with open('out_file.fastq', 'w') as f:
    for item in new_line:
        f.write("%s\n" % item)

но он не возвращает то, что я хочу. Как исправить это, чтобы получить ожидаемый результат?

  • 0
    вы, вероятно, пропустили else в if else, чтобы сгенерировать весь документ
Теги:

3 ответа

2

Я думаю, что некоторые itertools.cycle могут быть хорошими здесь:

import itertools

with open("transformed.file.fastq", "w+") as output_file:
    with open("file.fastq", "r") as input_file:
        for i in itertools.cycle((1,2,3,4)):
            line = input_file.readline().strip()
            if not line:
                break
            if i in (2,4):
                line = line[:65]
            output_file.write("{}\n".format(line))
2

Этот код достигнет того, чего вы хотите -

from itertools import islice
with open('bio.txt', 'r') as infile:
    while True:
        lines_gen = list(islice(infile, 4))
        if not lines_gen:
            break
        a,b,c,d = lines_gen
        b = b[0:65]+'\n'
        d = d[0:65]+'\n'
        with open('mod_bio.txt', 'a+') as f:
            f.write(a+b+c+d)

Как это устроено?
Сначала мы создаем генератор, который дает по 4 строки за раз, как вы упоминаете. Затем мы открываем строки в отдельные строки a,b,c,d и выполняем строчную сортировку. В конце концов мы присоединяемся к этой строке и записываем ее в новый файл.

1

readlines() вернет список каждой строки в вашем файле. Вам не нужно готовить список new_line. Непосредственно перебирайте пара индексов и значений, затем вы можете изменить все значения в желаемой позиции.

Изменив свой код, попробуйте это

infile = open("file.fastq", "r")
new_lines = infile.readlines()
for i, t in enumerate(new_lines):
    if i == 1 or i == 3:
        new_lines[i] = new_lines[i][:65]

with open('out_file.fastq', 'w') as f:
    for item in new_lines:
        f.write("%s" % item)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню