В каждую нечетную строку добавить текст из четной строки

Рейтинг: 1Ответов: 3Опубликовано: 20.02.2023

Суть такова, есть файл в построчном виде, в файле N строк:

какой-то текст постоянно меняется
h4l46b2.pdf
какой-то текст постоянно меняется
74d41bg.djvu

и так далее. Каждая четная строка имеет строго определенное количество символов до точки. Нужно из каждой четной строки вырезать ".+расширение" и вставить её в конец каждой предыдущей нечетной строки, т.е.:

какой-то текст постоянно меняется.pdf
h4l46b2
какой-то текст постоянно меняется.djvu
74d41bg

Ответы

▲ 1Принят

Можно попробовать что-то подобное. Вот результат работы кода на практике:

введите сюда описание изображения

Вот и сам код:

with open('input_file.txt', 'r') as input_file, open('output_file.txt', 'w') as output_file:
    # Читаем первую строку
    line = input_file.readline().strip()

    while line:
        # Добавляем расширение из следующей четной строки в текущую нечетную строку
        if not line.endswith('.pdf') and not line.endswith('.djvu'):
            extension = input_file.readline().strip().split('.')[-1]
            line += f'.{extension}'

        # Записываем строку в выходной файл
        output_file.write(line + '\n')

        # Читаем следующую строку
        line = input_file.readline().strip()
▲ 1

Вот одно из решений. Думаю логику из этого извлечь можно. Если появятся вопросы - задавай, но вроде как я всё расписал. После завершения ввода всех данных, нужно начать Ctrl+Z чтобы завершить ввод

import sys

# Считываем весь ввод. Так как у нас неизвестное кол-во строк - используем sys.stdin
all_data = tuple(map(str.strip, sys.stdin.readlines()))

# Делим строки на чётные/нечётные
odd_rows = all_data[0::2]
even_rows = all_data[1::2]

answer = list()

# С помощью zip() запаковываем чётные и нечётные строки в 1 цикл
for line1, line2 in zip(odd_rows, even_rows):
    format_index = line2.rfind(".")
    # Добавляем в конец 1 расширения, а в конце 2 его убираем 
    answer.append(line1 + line2[format_index:])
    answer.append(line2[:format_index])

# Выводим ответ
print(*answer, sep="\n")
▲ 1
with open('input.txt') as f:
all_lines = f.readlines()
for i in range(len(all_lines)):
    all_lines[i] = all_lines[i].strip('\n')
    if i % 2 == 0:
        prev_line = all_lines[i]
    if i % 2 == 1:
        line = all_lines[i].split('.')[-1]
        all_lines[i -1] += f'.{line}'
        all_lines[i] = ''.join(all_lines[i].split('.')[:-1])

Время O(N). Думаю как записать в файл разберетесь.