Merge pull request 'klyushenkova_ksenia_lab_2 is ready' (#379) from klyushenkova_ksenia_lab_2 into main
Reviewed-on: #379
This commit is contained in:
commit
a8ab542248
2
klyushenkova_ksenia_lab_2/.gitignore
vendored
Normal file
2
klyushenkova_ksenia_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/.venv
|
||||
/.idea
|
15
klyushenkova_ksenia_lab_2/README.md
Normal file
15
klyushenkova_ksenia_lab_2/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Клюшенкова Ксения ПИбд-42
|
||||
# Лабораторная работа №2 - Разработка простейшего распределённого приложения
|
||||
|
||||
### Язык разработки приложений: Python
|
||||
|
||||
## Варианты
|
||||
- Программа 1: Ищет в каталоге ```/var/data``` самый большой по объёму файл и перекладывает его в ```/var/result/data.txt```.
|
||||
- Программа 2: Сохраняет произведение первого и последнего числа из файла ```/var/result/data.txt``` в ```/var/result/result.txt```.
|
||||
|
||||
## Описание:
|
||||
Первая программа лежит в папке w-1, вторая в папке w-2. В каждой папке также есть DockerFile, содержащие в себе
|
||||
инструкции по сборке. В них присутствуют комментарии для значимых строк. Монтированные папки ```data``` для ```/var/data``` и ```result``` для ```/var/result```.
|
||||
|
||||
|
||||
## [Видео](https://disk.yandex.ru/i/es7vPXJMiW5Rlg)
|
1
klyushenkova_ksenia_lab_2/data/1.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/1.txt
Normal file
@ -0,0 +1 @@
|
||||
3 7 12 18 25 3 7 12 18 25
|
1
klyushenkova_ksenia_lab_2/data/2.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/2.txt
Normal file
@ -0,0 +1 @@
|
||||
10 20 30 40 50
|
1
klyushenkova_ksenia_lab_2/data/3.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/3.txt
Normal file
@ -0,0 +1 @@
|
||||
5 15 30 50 75
|
1
klyushenkova_ksenia_lab_2/data/4.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/4.txt
Normal file
@ -0,0 +1 @@
|
||||
-4 -2 0 2 4
|
1
klyushenkova_ksenia_lab_2/data/5.txt
Normal file
1
klyushenkova_ksenia_lab_2/data/5.txt
Normal file
@ -0,0 +1 @@
|
||||
100 95 90 85 80
|
18
klyushenkova_ksenia_lab_2/docker-compose.yaml
Normal file
18
klyushenkova_ksenia_lab_2/docker-compose.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
services:
|
||||
|
||||
worker_one:
|
||||
container_name: w-1
|
||||
build:
|
||||
context: ./w-1
|
||||
volumes:
|
||||
- ./data:/var/data
|
||||
- ./result:/var/result
|
||||
|
||||
worker_two:
|
||||
container_name: w-2
|
||||
build:
|
||||
context: ./w-2
|
||||
volumes:
|
||||
- ./result:/var/result
|
||||
depends_on:
|
||||
- worker_one
|
1
klyushenkova_ksenia_lab_2/result/data.txt
Normal file
1
klyushenkova_ksenia_lab_2/result/data.txt
Normal file
@ -0,0 +1 @@
|
||||
3 7 12 18 25 3 7 12 18 25
|
1
klyushenkova_ksenia_lab_2/result/result.txt
Normal file
1
klyushenkova_ksenia_lab_2/result/result.txt
Normal file
@ -0,0 +1 @@
|
||||
625.0
|
7
klyushenkova_ksenia_lab_2/w-1/Dockerfile
Normal file
7
klyushenkova_ksenia_lab_2/w-1/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY worker-1.py .
|
||||
|
||||
CMD ["python", "worker-1.py"]
|
44
klyushenkova_ksenia_lab_2/w-1/worker-1.py
Normal file
44
klyushenkova_ksenia_lab_2/w-1/worker-1.py
Normal file
@ -0,0 +1,44 @@
|
||||
import os
|
||||
import shutil
|
||||
|
||||
# Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
|
||||
# Определяем пути
|
||||
source_dir = '/var/data'
|
||||
target_file = '/var/result/data.txt'
|
||||
|
||||
def find_largest_file(directory):
|
||||
largest_file = None
|
||||
max_size = 0
|
||||
|
||||
# Перебираем все файлы в каталоге
|
||||
for root, _, files in os.walk(directory):
|
||||
for file in files:
|
||||
file_path = os.path.join(root, file)
|
||||
try:
|
||||
size = os.path.getsize(file_path)
|
||||
if size > max_size:
|
||||
max_size = size
|
||||
largest_file = file_path
|
||||
except OSError as e:
|
||||
print(f"Ошибка при обработке файла {file_path}: {e}")
|
||||
|
||||
return largest_file
|
||||
|
||||
def move_largest_file_to_target(source_dir, target_file):
|
||||
largest_file = find_largest_file(source_dir)
|
||||
if not largest_file:
|
||||
print("В каталоге нет файлов.")
|
||||
return
|
||||
|
||||
try:
|
||||
# Создаём директорию для файла, если она не существует
|
||||
os.makedirs(os.path.dirname(target_file), exist_ok=True)
|
||||
|
||||
# Перемещаем содержимое самого большого файла
|
||||
shutil.copyfile(largest_file, target_file)
|
||||
print(f"Самый большой файл {largest_file} был перемещён в {target_file}.")
|
||||
except OSError as e:
|
||||
print(f"Ошибка при перемещении файла: {e}")
|
||||
|
||||
|
||||
move_largest_file_to_target(source_dir, target_file)
|
7
klyushenkova_ksenia_lab_2/w-2/Dockerfile
Normal file
7
klyushenkova_ksenia_lab_2/w-2/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY worker-2.py .
|
||||
|
||||
CMD ["python", "worker-2.py"]
|
49
klyushenkova_ksenia_lab_2/w-2/worker-2.py
Normal file
49
klyushenkova_ksenia_lab_2/w-2/worker-2.py
Normal file
@ -0,0 +1,49 @@
|
||||
import os
|
||||
|
||||
# Ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt.
|
||||
# Пути к файлам
|
||||
input_file = '/var/result/data.txt'
|
||||
output_file = '/var/result/result.txt'
|
||||
|
||||
def find_largest_number_and_save_squared(input_file, output_file):
|
||||
try:
|
||||
# Проверяем существование входного файла
|
||||
if not os.path.exists(input_file):
|
||||
print(f"Файл {input_file} не найден.")
|
||||
return
|
||||
|
||||
# Чтение чисел из файла
|
||||
with open(input_file, 'r') as file:
|
||||
numbers = []
|
||||
for line in file:
|
||||
for word in line.split():
|
||||
try:
|
||||
numbers.append(float(word))
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
# Проверяем, что числа найдены
|
||||
if not numbers:
|
||||
print("В файле нет чисел.")
|
||||
return
|
||||
|
||||
# Находим наибольшее число
|
||||
largest_number = max(numbers)
|
||||
|
||||
# Вычисляем квадрат
|
||||
squared_number = largest_number ** 2
|
||||
|
||||
# Создаём директорию для файла, если её нет
|
||||
os.makedirs(os.path.dirname(output_file), exist_ok=True)
|
||||
|
||||
# Записываем квадрат в файл
|
||||
with open(output_file, 'w') as file:
|
||||
file.write(str(squared_number))
|
||||
|
||||
print(f"Наибольшее число: {largest_number}")
|
||||
print(f"Квадрат числа сохранён в {output_file}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
|
||||
|
||||
find_largest_number_and_save_squared(input_file, output_file)
|
Loading…
Reference in New Issue
Block a user