diff --git a/chernyshov_nikita_lab_2/README.md b/chernyshov_nikita_lab_2/README.md new file mode 100644 index 0000000..d1b8854 --- /dev/null +++ b/chernyshov_nikita_lab_2/README.md @@ -0,0 +1,22 @@ +## Лабораторная работа №2 + + +**App 1: Программа 4 - Количество символов в именах файлов из каталога /var/data** + +- Формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data. + +**App 2: Программа 3 - Количество чисел в последовательности** + +- Ищет набольшее число из файла /var/result/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt. + +**Структура проекта:** + +1. В папках app_1, app_2 лежат выполняемые файлы .py и Dockerfile с нужным кодом. +2. В папке generator_of_data лежат выполняемые файлы для создания данных. +3. В папке data лежат файлы, длину имен которых нужно посчитать. +4. В папке result лежат файлы с результатами выполнения программ. data.txt - результат выполнения main.py (app_1), result.txt - результат выполнения main.py (app_2). Данные в result рассчитываются из данных data. +5. docker-compose.yml - для определения и управления контейнерами Docker. + +**Команда для запуска** - docker-compose up + +**Ссылка на видео:** https://vkvideo.ru/video286865610_456239225?list=ln-Xqg7SupM1CohXsGRZK \ No newline at end of file diff --git a/chernyshov_nikita_lab_2/app_1/Dockerfile b/chernyshov_nikita_lab_2/app_1/Dockerfile new file mode 100644 index 0000000..0690732 --- /dev/null +++ b/chernyshov_nikita_lab_2/app_1/Dockerfile @@ -0,0 +1,20 @@ +# Используем образ Python 3.9-slim как основу для нашего контейнера. +# slim-версия образа более компактная, что делает контейнер меньше. +FROM python:3.9-slim +# Устанавливаем рабочую директорию в контейнере как /app. +# Все последующие команды будут выполняться в этой директории. +WORKDIR /app +# Копируем файл main.py из текущей директории в директорию /app в контейнере. +COPY . /app +# Определяем команду, которая будет выполняться при запуске контейнера. +# В данном случае запускается Python-скрипт main.py. +CMD ["python", "main.py"] + + + + + + + + + diff --git a/chernyshov_nikita_lab_2/app_1/main.py b/chernyshov_nikita_lab_2/app_1/main.py new file mode 100644 index 0000000..5e945ea --- /dev/null +++ b/chernyshov_nikita_lab_2/app_1/main.py @@ -0,0 +1,38 @@ +import os + +def get_file_with_most_lines(directory): + max_lines = 0 + target_file = "" + + for filename in os.listdir(directory): + filepath = os.path.join(directory, filename) + if os.path.isfile(filepath): + with open(filepath, 'r') as f: + line_count = sum(1 for _ in f) + if line_count > max_lines: + max_lines = line_count + target_file = filename + + return target_file + +def copy_file(src_directory, dest_directory, filename): + src_filepath = os.path.join(src_directory, filename) + dest_filepath = os.path.join(dest_directory, 'data.txt') + + os.makedirs(dest_directory, exist_ok=True) + + with open(src_filepath, 'r') as src_file: + with open(dest_filepath, 'w') as dest_file: + dest_file.write(src_file.read()) + +def main(): + src_directory = '/var/data' + dest_directory = '/var/result' + + target_file = get_file_with_most_lines(src_directory) + if target_file: + copy_file(src_directory, dest_directory, target_file) + print(f"File {target_file} copied to {dest_directory}/data.txt") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/chernyshov_nikita_lab_2/app_2/Dockerfile b/chernyshov_nikita_lab_2/app_2/Dockerfile new file mode 100644 index 0000000..946d3a7 --- /dev/null +++ b/chernyshov_nikita_lab_2/app_2/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.9-slim + +WORKDIR /app + +COPY . /app + +CMD ["python", "main.py"] \ No newline at end of file diff --git a/chernyshov_nikita_lab_2/app_2/main.py b/chernyshov_nikita_lab_2/app_2/main.py new file mode 100644 index 0000000..b25deb9 --- /dev/null +++ b/chernyshov_nikita_lab_2/app_2/main.py @@ -0,0 +1,25 @@ +import os + +def get_largest_number_from_file(filepath): + with open(filepath, 'r') as f: + numbers = [int(line.strip()) for line in f.readlines()] + return max(numbers) + +def save_square_of_number(number, output_filepath): + result = number ** 2 + with open(output_filepath, 'w') as f: + f.write(str(result)) + +def main(): + input_filepath = '/var/result/data.txt' + output_filepath = '/var/result/result.txt' + + if os.path.exists(input_filepath): + largest_number = get_largest_number_from_file(input_filepath) + save_square_of_number(largest_number, output_filepath) + print(f"Largest number squared: {largest_number}^2 saved to {output_filepath}") + else: + print(f"Input file {input_filepath} not found!") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/chernyshov_nikita_lab_2/docker-compose.yml b/chernyshov_nikita_lab_2/docker-compose.yml new file mode 100644 index 0000000..5f2cb34 --- /dev/null +++ b/chernyshov_nikita_lab_2/docker-compose.yml @@ -0,0 +1,22 @@ +version: '3' +services: + generator_of_data: + build: + context: ./generator_of_data + volumes: + - ./data:/var/data + app_1: + build: + context: ./app_1 + volumes: + - ./data:/var/data + - ./result:/var/result + depends_on: + - generator_of_data + app_2: + build: + context: ./app_2 + volumes: + - ./result:/var/result + depends_on: + - app_1 diff --git a/chernyshov_nikita_lab_2/generator_of_data/Dockerfile b/chernyshov_nikita_lab_2/generator_of_data/Dockerfile new file mode 100644 index 0000000..9ce2be9 --- /dev/null +++ b/chernyshov_nikita_lab_2/generator_of_data/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.9-slim + +WORKDIR /app + +COPY . /app + +CMD ["python", "generate_data.py"] \ No newline at end of file diff --git a/chernyshov_nikita_lab_2/generator_of_data/generate_data.py b/chernyshov_nikita_lab_2/generator_of_data/generate_data.py new file mode 100644 index 0000000..913ba85 --- /dev/null +++ b/chernyshov_nikita_lab_2/generator_of_data/generate_data.py @@ -0,0 +1,27 @@ +import os +import random + +def generate_random_files(directory, num_files, num_lines_per_file, min_value, max_value): + os.makedirs(directory, exist_ok=True) + + for i in range(num_files): + file_path = os.path.join(directory, f"file_{i + 1}.txt") + with open(file_path, 'w') as f: + for _ in range(num_lines_per_file): + random_number = random.randint(min_value, max_value) + f.write(f"{random_number}\n") + print(f"Generated file: {file_path}") + +def main(): + data_directory = '/var/data' + num_files = 10 + num_lines_per_file = 12 + min_value = 1 + max_value = 100 + + generate_random_files(data_directory, num_files, num_lines_per_file, min_value, max_value) + print(f"Generated {num_files} files in {data_directory}") + + +if __name__ == "__main__": + main() \ No newline at end of file