В каждую нечетную строку добавить текст из четной строки
Суть такова, есть файл в построчном виде, в файле N строк:
какой-то текст постоянно меняется
h4l46b2.pdf
какой-то текст постоянно меняется
74d41bg.djvu
и так далее. Каждая четная строка имеет строго определенное количество символов до точки. Нужно из каждой четной строки вырезать ".+расширение" и вставить её в конец каждой предыдущей нечетной строки, т.е.:
какой-то текст постоянно меняется.pdf
h4l46b2
какой-то текст постоянно меняется.djvu
74d41bg
Ответы (3 шт):
Автор решения: Andrew
→ Ссылка
Вот одно из решений. Думаю логику из этого извлечь можно. Если появятся вопросы - задавай, но вроде как я всё расписал. После завершения ввода всех данных, нужно начать 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")
Автор решения: M141
→ Ссылка
Можно попробовать что-то подобное. Вот результат работы кода на практике:
Вот и сам код:
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()
Автор решения: neo-noir
→ Ссылка
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). Думаю как записать в файл разберетесь.
