From fd88e38976bacc2771b1c2be4697c910b05d90f6 Mon Sep 17 00:00:00 2001 From: BlasphemyGod Date: Sat, 16 Nov 2024 23:02:15 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- polevoy_sergey_lab_2/.gitignore | 2 + polevoy_sergey_lab_2/docker-compose.yml | 18 ++++++++ polevoy_sergey_lab_2/first/Dockerfile | 8 ++++ polevoy_sergey_lab_2/first/first.py | 59 +++++++++++++++++++++++++ polevoy_sergey_lab_2/readme.md | 35 +++++++++++++++ polevoy_sergey_lab_2/second/Dockerfile | 8 ++++ polevoy_sergey_lab_2/second/second.py | 18 ++++++++ 7 files changed, 148 insertions(+) create mode 100644 polevoy_sergey_lab_2/.gitignore create mode 100644 polevoy_sergey_lab_2/docker-compose.yml create mode 100644 polevoy_sergey_lab_2/first/Dockerfile create mode 100644 polevoy_sergey_lab_2/first/first.py create mode 100644 polevoy_sergey_lab_2/readme.md create mode 100644 polevoy_sergey_lab_2/second/Dockerfile create mode 100644 polevoy_sergey_lab_2/second/second.py diff --git a/polevoy_sergey_lab_2/.gitignore b/polevoy_sergey_lab_2/.gitignore new file mode 100644 index 0000000..d8adfc8 --- /dev/null +++ b/polevoy_sergey_lab_2/.gitignore @@ -0,0 +1,2 @@ +data +result \ No newline at end of file diff --git a/polevoy_sergey_lab_2/docker-compose.yml b/polevoy_sergey_lab_2/docker-compose.yml new file mode 100644 index 0000000..8eee1c3 --- /dev/null +++ b/polevoy_sergey_lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +services: + # Сервис с первым скриптом + first: + build: + context: ./first/ # Указываем путь к директории скрипта и Dockerfile + volumes: # Монтируем локальную директорию с данными в /var/data и локальную директорию с результирующими данными в /var/result + - ./data:/var/data + - ./result:/var/result + + # Сервис со вторым скриптом + second: + depends_on: # Второй скрипт выполнится после первого + - first + build: + context: ./second/ + volumes: + - ./data:/var/data + - ./result:/var/result \ No newline at end of file diff --git a/polevoy_sergey_lab_2/first/Dockerfile b/polevoy_sergey_lab_2/first/Dockerfile new file mode 100644 index 0000000..d36cf12 --- /dev/null +++ b/polevoy_sergey_lab_2/first/Dockerfile @@ -0,0 +1,8 @@ +# Образ с нужной версией python +FROM python:3.12-alpine +# Указание рабочей папки +WORKDIR /app +# Копирование исходного файла в рабочую папку +COPY first.py . +# Команда запуска +CMD ["python", "first.py"] \ No newline at end of file diff --git a/polevoy_sergey_lab_2/first/first.py b/polevoy_sergey_lab_2/first/first.py new file mode 100644 index 0000000..57e7f3e --- /dev/null +++ b/polevoy_sergey_lab_2/first/first.py @@ -0,0 +1,59 @@ +import os +import random +import shutil + +# Задаются пути к папкам и файлам +source_directory = "/var/data" +destination_directory = "/var/result" +destination_file = os.path.join(destination_directory, "data.txt") + +# Создание случайных файлов для работы системы, так как заранее файлы нерационально создавать +def generate_random_files(directory): + # Создание необходимых папок, если они не существуют, если существуют, то пропускаем + os.makedirs(directory, exist_ok=True) + + # Будет от 5 до 10 файлов + num_files = random.randint(5, 10) + + for i in range(1, num_files + 1): + file_name = f"file_{i}.txt" + file_path = os.path.join(directory, file_name) + + # Будет от 1 до 100 чисел со значением от 1 до 100 + num_numbers = random.randint(1, 100) + numbers = [str(random.randint(1, 100)) for _ in range(num_numbers)] + + # Числа сохраняются в файл каждое на новой строке + with open(file_path, 'w') as f: + f.write("\n".join(numbers)) + + print(f"Создано {num_files} файлов в директории {directory}.") + +# Находится файл с самым большим количеством строк и копируется в папку назначения +def find_and_copy_longest_file(source_dir, destination_file): + if not os.path.exists(source_dir) or not os.path.isdir(source_dir): + return print ("Папки с данными не существует. Завершение выполнения") + + longest_file = None + longest_lines = 0 + + for filename in os.listdir(source_dir): + filepath = os.path.join(source_dir, filename) + + with open(filepath, mode="r") as file: + length = len(file.readlines()) + + if length > longest_lines: + longest_file = filepath + longest_lines = length + + if longest_file is None: + return print("Папка с данными пуста. Завершение выполнения") + + shutil.copy(longest_file, destination_file) + print(f"Файл \"{longest_file}\" с количеством строк {longest_lines} скопирован в {destination_file}") + + +if __name__ == "__main__": + generate_random_files(source_directory) + find_and_copy_longest_file(source_directory, destination_file) diff --git a/polevoy_sergey_lab_2/readme.md b/polevoy_sergey_lab_2/readme.md new file mode 100644 index 0000000..302719e --- /dev/null +++ b/polevoy_sergey_lab_2/readme.md @@ -0,0 +1,35 @@ +# Лабораторная работа №2 +#### ПИбд-42. Полевой Сергей. + +#### Задание: +Для используемых программ были выбраны следующие варианты: +1) **Вариант 1**: Ищет в каталоге ```/var/data``` файл с наибольшим количеством строк и перекладывает его в ```/var/result/data.txt```. +2) **Вариант 1**: Ищет набольшее число из файла ```/var/data/data.txt``` и сохраняет его вторую степень в ```/var/result/result.txt```. +При этом для предварительного заполнения данными первый скрипт создаёт необходимые файлы с числами, а уже потом реализует функционал из варианта + +#### При выполнении были использованы: +- Python 3.12 +- Docker +- Docker Compose + +#### Инструкция: +Для запуска лабораторной работы, перейдите в папку *mochalov_danila_lab_2* и выполните команду: +``` +docker-compose up --build --remove-orphans +``` + +#### Результат +``` +[+] Running 2/2 + ✔ Container polevoy_sergey_lab_2-first-1 Created 0.0s + ✔ Container polevoy_sergey_lab_2-second-1 Recreated 0.2s +Attaching to first-1, second-1 +first-1 | Создано 6 файлов в директории /var/data. +first-1 | Файл "/var/data/file_1.txt" с количеством строк 80 скопирован в /var/result/data.txt +first-1 exited with code 0 +second-1 | В файл /var/result/result.txt записано наибольшее число во второй степени из файла /var/result/data.txt +second-1 exited with code 0 +``` + +#### Демонстрация работы +Доступна по [ссылке](https://disk.yandex.ru/i/5su3yVLoaOBCrA) \ No newline at end of file diff --git a/polevoy_sergey_lab_2/second/Dockerfile b/polevoy_sergey_lab_2/second/Dockerfile new file mode 100644 index 0000000..c26dcc2 --- /dev/null +++ b/polevoy_sergey_lab_2/second/Dockerfile @@ -0,0 +1,8 @@ +# Образ с нужной версией python +FROM python:3.12-alpine +# Указание рабочей папки +WORKDIR /app +# Копирование исходного файла в рабочую папку +COPY second.py . +# Команда запуска +CMD ["python", "second.py"] \ No newline at end of file diff --git a/polevoy_sergey_lab_2/second/second.py b/polevoy_sergey_lab_2/second/second.py new file mode 100644 index 0000000..8c993e8 --- /dev/null +++ b/polevoy_sergey_lab_2/second/second.py @@ -0,0 +1,18 @@ +import os + +# Указание путей к файлу данных и результирующему файлу +data_file = "/var/result/data.txt" +result_file = "/var/result/result.txt" + +def power_greatest_number(source_file, result_file): + with open(source_file, mode="r") as file: + largest_number = max(int(number) for number in file.readlines()) + + with open(result_file, mode="w") as file: + file.write(str(largest_number ** 2)) + + print(f"В файл {result_file} записано наибольшее число во второй степени из файла {source_file}") + + +if __name__ == "__main__": + power_greatest_number(data_file, result_file) From 837af682e23dacbd95f7ab6630b5e92052551439 Mon Sep 17 00:00:00 2001 From: BlasphemyGod Date: Sat, 16 Nov 2024 23:03:59 +0400 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- polevoy_sergey_lab_2/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polevoy_sergey_lab_2/readme.md b/polevoy_sergey_lab_2/readme.md index 302719e..83e526d 100644 --- a/polevoy_sergey_lab_2/readme.md +++ b/polevoy_sergey_lab_2/readme.md @@ -13,7 +13,7 @@ - Docker Compose #### Инструкция: -Для запуска лабораторной работы, перейдите в папку *mochalov_danila_lab_2* и выполните команду: +Для запуска лабораторной работы, перейдите в папку *polevoy_sergey_lab_2* и выполните команду: ``` docker-compose up --build --remove-orphans ```