diff --git a/artamonova_tatyana_lab_2/.gitignore b/artamonova_tatyana_lab_2/.gitignore new file mode 100644 index 0000000..79b0ca1 --- /dev/null +++ b/artamonova_tatyana_lab_2/.gitignore @@ -0,0 +1,5 @@ +*.pyc +__pycache__ +*.egg-info +*.dist-info +.DS_Store \ No newline at end of file diff --git a/artamonova_tatyana_lab_2/README.md b/artamonova_tatyana_lab_2/README.md new file mode 100644 index 0000000..dd594fd --- /dev/null +++ b/artamonova_tatyana_lab_2/README.md @@ -0,0 +1,22 @@ +## Лабораторная работа №2 +### Выполнила Артамонова Татьяна ПИбд-42 + +**Вариант 1: Программа 4 - Количество символов в именах файлов из каталога /var/data** + +- Формирует файл /var/result/data1.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data. + +**Вариант 2: Программа 3 - Количество чисел в последовательности** + +- Ищет набольшее число из файла /var/result/data1.txt и сохраняет количество таких чисел из последовательности в /var/result/data2.txt. + +**Структура проекта:** + +1. В папках worker-1, worker-2 лежат выполняемые файлы .py и Dockerfile-ы с необходимым набором инструкций. +2. В папке data лежат файлы, длину имен которых нужно посчитать. +3. В папке result лежат файлы с результатами выполнения программ. data1.txt - результат выполнения main1.py (worker-1), data2.txt - результат выполнения main2.py (worker-2). Данные в data2 рассчитываются из данных data1. +4. Файл .gitignore - для указания, какие файлы отслеживать, а какие - нет. +5. docker-compose.yml - для определения и управления контейнерами Docker. + +**Команда для запуска** - docker-compose up --build + +**Ссылка на видео:** https://vk.com/artamonovat?z=video212084908_456239357%2Fvideos212084908%2Fpl_212084908_-2 \ No newline at end of file diff --git a/artamonova_tatyana_lab_2/data/exampleFile.txt b/artamonova_tatyana_lab_2/data/exampleFile.txt new file mode 100644 index 0000000..e69de29 diff --git a/artamonova_tatyana_lab_2/data/exampleFile123.txt b/artamonova_tatyana_lab_2/data/exampleFile123.txt new file mode 100644 index 0000000..e69de29 diff --git a/artamonova_tatyana_lab_2/data/exampleFile456.txt b/artamonova_tatyana_lab_2/data/exampleFile456.txt new file mode 100644 index 0000000..e69de29 diff --git a/artamonova_tatyana_lab_2/docker-compose.yml b/artamonova_tatyana_lab_2/docker-compose.yml new file mode 100644 index 0000000..c08293c --- /dev/null +++ b/artamonova_tatyana_lab_2/docker-compose.yml @@ -0,0 +1,22 @@ +services: + worker-1: + build: + context: ./worker-1 + volumes: + - ./worker-1:/app + - ./data:/var/data + - ./result:/var/result + depends_on: + - worker-2 + + worker-2: + build: + context: ./worker-2 + volumes: + - ./worker-2:/app + - ./data:/var/data + - ./result:/var/result + +volumes: + data: + result: diff --git a/artamonova_tatyana_lab_2/result/data1.txt b/artamonova_tatyana_lab_2/result/data1.txt new file mode 100644 index 0000000..9f05acf --- /dev/null +++ b/artamonova_tatyana_lab_2/result/data1.txt @@ -0,0 +1,3 @@ +15 +18 +18 diff --git a/artamonova_tatyana_lab_2/result/data2.txt b/artamonova_tatyana_lab_2/result/data2.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/artamonova_tatyana_lab_2/result/data2.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/artamonova_tatyana_lab_2/worker-1/Dockerfile b/artamonova_tatyana_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..732ed27 --- /dev/null +++ b/artamonova_tatyana_lab_2/worker-1/Dockerfile @@ -0,0 +1,14 @@ +# Используем образ Python 3.10-slim как основу для нашего контейнера. +# slim-версия образа более компактная, что делает контейнер меньше. +FROM python:3.10-slim + +# Устанавливаем рабочую директорию в контейнере как /app. +# Все последующие команды будут выполняться в этой директории. +WORKDIR /app + +# Копируем файл main1.py из текущей директории в директорию /app в контейнере. +COPY main1.py . + +# Определяем команду, которая будет выполняться при запуске контейнера. +# В данном случае запускается Python-скрипт main1.py. +CMD ["python", "main1.py"] diff --git a/artamonova_tatyana_lab_2/worker-1/main1.py b/artamonova_tatyana_lab_2/worker-1/main1.py new file mode 100644 index 0000000..c14ac98 --- /dev/null +++ b/artamonova_tatyana_lab_2/worker-1/main1.py @@ -0,0 +1,21 @@ +import os +import glob + +# Формирует файл data1.txt так, что каждая строка файла - кол-во символов в именах файла из каталога /data +def main(): + data_dir = "/var/data" + result_file = "/var/result/data1.txt" + + result_dir = os.path.dirname(result_file) + if not os.path.exists(result_dir): + os.makedirs(result_dir) + + files = glob.glob(os.path.join(data_dir, '*')) + + with open(result_file, 'w') as f: + for file in files: + filename = os.path.basename(file) + f.write(f"{len(filename)}\n") + +if __name__ == "__main__": + main() diff --git a/artamonova_tatyana_lab_2/worker-2/Dockerfile b/artamonova_tatyana_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..6e645de --- /dev/null +++ b/artamonova_tatyana_lab_2/worker-2/Dockerfile @@ -0,0 +1,14 @@ +# Используем образ Python 3.10-slim как основу для нашего контейнера. +# slim-версия образа более компактная, что делает контейнер меньше. +FROM python:3.10-slim + +# Устанавливаем рабочую директорию в контейнере как /app. +# Все последующие команды будут выполняться в этой директории. +WORKDIR /app + +# Копируем файл main2.py из текущей директории в директорию /app в контейнере. +COPY main2.py . + +# Определяем команду, которая будет выполняться при запуске контейнера. +# В данном случае запускается Python-скрипт main2.py. +CMD ["python", "main2.py"] diff --git a/artamonova_tatyana_lab_2/worker-2/main2.py b/artamonova_tatyana_lab_2/worker-2/main2.py new file mode 100644 index 0000000..ca477a1 --- /dev/null +++ b/artamonova_tatyana_lab_2/worker-2/main2.py @@ -0,0 +1,26 @@ +import os + +# Ищет наибольшее число из файла data1.txt и сохраняет количество таких чисел из последовательности в data2.txt +def main(): + data_file_path = "/var/result/data1.txt" + result_file_path = "/var/result/data2.txt" + + if not os.path.exists(data_file_path): + data_dir = os.path.dirname(data_file_path) + + if not os.path.exists(result_file_path): + result_dir = os.path.dirname(result_file_path) + + with open(data_file_path, 'r') as f: + numbers = [int(x.strip()) for x in f.read().splitlines()] + + max_number = max(numbers) + count = numbers.count(max_number) + + with open(result_file_path, 'w') as f: + f.write(str(count)) + + print(f"Количество наибольших чисел: {count}") + +if __name__ == "__main__": + main()