I. Файловая чистка

Python в первую очередь скриптовый язык. Такие языки часто используются для создания консольных утилит.

Напишите простую утилиту, которая очищает заданный файл от:

  • повторяющихся пробелов;
  • повторяющихся символов перевода строки;
  • табуляций,
  • излишних пробелов в начале и конце строк.

Формат ввода

Пользователь вводит два имени файлов.
Входной файл содержит неформатированный текст произвольной длины.

Формат вывода

Во второй файл выведите очищенный текст.

Пример

Ввод

# Пользовательский ввод:
first.txt
second.txt

# Содержимое файла first.txt
    очень 		 плохо форматированный       текст


ну		ну	
прямо

очень-очень

	

Вывод

# Содержимое файла second.txt
очень плохо форматированный текст
нуну
прямо
очень-очень

Решение

Основная проблема в этой задаче – наличие повторяющихся пробелов. Справиться с ними можно разными способами. Можно удалять сдвоенные пробелы в строке, пока они там остаются. Можно воспользоваться умением метода split() удалять любое количество пробелов при вызове без параметров. Но нужно помнить, что split() без параметров разбивает строку по знакам табуляции и перевода строки. А это значит, что при выборе этого способа придется позаботиться о сохранности переводов строк. При любом способе решения табуляциями стоит заняться в первую очередь, потому что два пробела, разделенные табуляцией превратятся в двойной пробел.

Посмотреть код

Решение

Python
file_in, file_out = input(), input()
data = []
with open(file_in, "r") as file:
    for string in file:
        data.append(string.strip().replace("\t", "").split())
data = [item for item in data if any(item)]
with open(file_out, "w") as file:
    for string in data:
        print(" ".join(string), file=file)

Решение

Python
file_in = input()
file_out = input()

with open(file_in, encoding="UTF-8") as file_in:
    text = file_in.read()

while text.find("\t") + 1:
    text = text.replace("\t", "")
while text.find("  ") + 1:
    text = text.replace("  ", " ")

text = "\n".join(string.strip() for string in text.split("\n") if string)

with open(file_out, "w", encoding="UTF-8") as file_out:
    file_out.write(text)
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Smotri
Smotri
09.12.2024 20:51

На мой взгляд, авторы хендбука некорректно составили тестовые данные, вот например вторая строка из примера “ну ну” превратилась в “нуну”, почему не в “ну ну”? это логичнее, ведь между явными цельными словами пробелоподобных разрывов нигде нет, а вот “нуну” они решили разбить двумя табами и считать что такое должно писаться слитно, логики не нашёл) да и собственный код из-за этого проверки не проходил, жаль обидно досадно