Решение задания 1. Подсчёт частоты слов
# solution_01_word_frequency.py
from collections import Counter
def count_words_in_file(filename):
with open(filename, "r", encoding="utf-8") as file:
text = file.read().lower()
punctuation = '.,!?;:"-'
for char in punctuation:
text = text.replace(char, " ")
return Counter(text.split())
filename = input("Введите имя файла: ")
try:
word_counts = count_words_in_file(filename)
num_words = int(input("Введите количество популярных слов: "))
print("\nПопулярные слова:")
for word, count in word_counts.most_common(num_words):
print(f"{word}: {count}")
except FileNotFoundError:
print("Ошибка: Файл не найден.")
except ValueError:
print("Ошибка: Введите целое число для количества популярных слов.")
Логика: читаем весь файл, приводим к нижнему регистру, заменяем знаки препинания на пробелы и считаем слова через Counter. Обрабатываем отсутствие файла и некорректный ввод числа.
Решение задания 2. Удаление пустых строк
# solution_02_remove_empty.py
import os
filename = input("Введите имя файла: ")
new_filename = f"{os.path.splitext(filename)[0]}_cleaned.txt"
try:
with (
open(filename, "r", encoding="utf-8") as infile,
open(new_filename, "w", encoding="utf-8") as outfile,
):
for line in infile:
if line.strip():
outfile.write(line)
print(f"Пустые строки удалены, сохранено в {new_filename}.")
except FileNotFoundError:
print(f"Ошибка: файл '{filename}' не найден.")
Логика: формируем имя выходного файла через os.path.splitext. Открываем оба файла в одном блоке with и копируем только те строки, которые не пустые после strip().
Решение задания 3. Файлы с заданным расширением
# solution_03_by_extension.py
import os
import sys
def find_files_by_extension(directory, extension):
if not extension.startswith("."):
extension = "." + extension
found = []
for filename in os.listdir(directory):
if filename.endswith(extension):
found.append(filename)
return found
if len(sys.argv) != 3:
print("Использование: python script.py <директория> <расширение>")
else:
directory = sys.argv[1]
extension = sys.argv[2]
try:
files = find_files_by_extension(directory, extension)
print(f"Найденные файлы в директории '{directory}':")
print(", ".join(files) if files else "Файлы не найдены.")
except FileNotFoundError:
print(f"Ошибка: директория '{directory}' не найдена.")
Логика: получаем директорию и расширение из аргументов командной строки. Перебираем файлы через os.listdir() и отбираем те, что заканчиваются на нужное расширение.
Решение задания 4. Фильтрация по ключевому слову (LMS)
# solution_04_filter_keyword.py
def filter_by_keyword(filename, keyword):
output_filename = f"{keyword}_{filename}"
matches = []
with open(filename, "r", encoding="utf-8") as file:
for line in file:
if keyword in line:
matches.append(line)
if matches:
with open(output_filename, "w", encoding="utf-8") as file:
file.writelines(matches)
print(f"Строки, содержащие '{keyword}', сохранены в {output_filename}.")
else:
print(f"Совпадений для '{keyword}' не найдено.")
filename = input("Введите имя файла для поиска: ")
keyword = input("Введите ключевое слово: ")
try:
filter_by_keyword(filename, keyword)
except FileNotFoundError:
print(f"Ошибка: файл '{filename}' не найден.")
Логика: читаем файл построчно, отбираем строки, содержащие ключевое слово. Если есть совпадения, создаём выходной файл; иначе сообщаем, что совпадений нет.
Решение задания 5. Удаление дубликатов (LMS)
# solution_05_remove_duplicates.py
def remove_duplicates(filename):
output_filename = f"unique_{filename}"
seen = set()
unique_lines = []
with open(filename, "r", encoding="utf-8") as file:
for line in file:
if line not in seen:
seen.add(line)
unique_lines.append(line)
with open(output_filename, "w", encoding="utf-8") as file:
file.writelines(unique_lines)
print(f"Дубликаты удалены. Уникальные строки сохранены в {output_filename}.")
filename = input("Введите имя файла: ")
try:
remove_duplicates(filename)
except FileNotFoundError:
print(f"Ошибка: файл '{filename}' не найден.")
Логика: используем множество seen для отслеживания уже встреченных строк и список unique_lines для сохранения порядка. Если дубликатов нет, файл просто копируется.