лаба 2 без ридми
This commit is contained in:
parent
3b9698ac38
commit
d3464a8888
3
karamushko_maxim_lab_2/.gitignore
vendored
Normal file
3
karamushko_maxim_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
data/
|
||||
result_first/
|
||||
result_second/
|
21
karamushko_maxim_lab_2/docker-compose.yml
Normal file
21
karamushko_maxim_lab_2/docker-compose.yml
Normal file
@ -0,0 +1,21 @@
|
||||
services:
|
||||
#Первый сервис
|
||||
first:
|
||||
#Директория для сборки первого сервиса
|
||||
build: ./service1/
|
||||
#Монтирование 2 каталогов
|
||||
volumes:
|
||||
- ./data:/var/data
|
||||
- ./result_first:/var/result
|
||||
|
||||
#Второй сервис
|
||||
second:
|
||||
#Директория для сборки второго сервиса
|
||||
build: ./service2/
|
||||
#Второй сервис запускается после первого
|
||||
depends_on:
|
||||
- first
|
||||
#Монтирование 2 каталогов
|
||||
volumes:
|
||||
- ./result_first:/var/data
|
||||
- ./result_second:/var/result
|
16
karamushko_maxim_lab_2/service1/Dockerfile
Normal file
16
karamushko_maxim_lab_2/service1/Dockerfile
Normal file
@ -0,0 +1,16 @@
|
||||
#Берем базовый образ python
|
||||
FROM python:3.12
|
||||
|
||||
#Устанавливаем рабочую директорию
|
||||
WORKDIR /service
|
||||
|
||||
#Копирум код в рабочую директорию
|
||||
COPY service.py .
|
||||
|
||||
#Задаем /var/data как монтируемый
|
||||
VOLUME ["/var/data"]
|
||||
#Задаем /var/result как монтируемый
|
||||
VOLUME ["/var/result"]
|
||||
|
||||
#Задаем команду для выполнения программы
|
||||
CMD ["python", "service.py"]
|
73
karamushko_maxim_lab_2/service1/service.py
Normal file
73
karamushko_maxim_lab_2/service1/service.py
Normal file
@ -0,0 +1,73 @@
|
||||
import os
|
||||
import random
|
||||
|
||||
# Путь к каталогу для поиска файла с наибольшим кол-вом строк
|
||||
path = "/var/data"
|
||||
|
||||
# Путь до файла с результатом
|
||||
resultPath = "/var/result/data.txt"
|
||||
|
||||
|
||||
def getMaxLines(directory):
|
||||
result = None
|
||||
maxLines = 0
|
||||
|
||||
for root, _, files in os.walk(directory):
|
||||
for file in files:
|
||||
filepath = os.path.join(root, file)
|
||||
|
||||
try:
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
cnt = 0
|
||||
for line in f:
|
||||
cnt += 1
|
||||
|
||||
if cnt > maxLines:
|
||||
maxLines = cnt
|
||||
result = (filepath, cnt)
|
||||
|
||||
except (OSError, UnicodeDecodeError) as e:
|
||||
print(f"Ошибка при обработке файла '{filepath}': {e}")
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def copyFile(first, second):
|
||||
try:
|
||||
with open(second, "wb") as second, open(first, "rb") as first:
|
||||
while chunk := first.read(4096):
|
||||
second.write(chunk)
|
||||
|
||||
print(f"Файл '{first}' успешно скопирован в '{second}'.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка при копировании файла '{first}': {e}")
|
||||
|
||||
|
||||
def generateRandomFiles(filename, count):
|
||||
with open(filename, "w") as f:
|
||||
for _ in range(count):
|
||||
num = random.randint(0, 5000)
|
||||
f.write(str(num) + "\n")
|
||||
|
||||
print(f"Случайные числа успешно записаны в '{filename}'.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generateRandomFiles("/var/data/file1.txt", 6)
|
||||
generateRandomFiles("/var/data/file2.txt", 9)
|
||||
generateRandomFiles("/var/data/file3.txt", 19)
|
||||
generateRandomFiles("/var/data/file4.txt", 11)
|
||||
generateRandomFiles("/var/data/file5.txt", 15)
|
||||
print("Генерация файлов завершена")
|
||||
|
||||
maxFile = getMaxLines(path)
|
||||
|
||||
if maxFile:
|
||||
fPath, _ = maxFile
|
||||
sPath = resultPath
|
||||
|
||||
copyFile(fPath, sPath)
|
||||
|
||||
else:
|
||||
print("Не найдены файлы")
|
16
karamushko_maxim_lab_2/service2/Dockerfile
Normal file
16
karamushko_maxim_lab_2/service2/Dockerfile
Normal file
@ -0,0 +1,16 @@
|
||||
#Берем базовый образ python
|
||||
FROM python:3.12
|
||||
|
||||
#Устанавливаем рабочую директорию
|
||||
WORKDIR /service
|
||||
|
||||
#Копирум код в рабочую директорию
|
||||
COPY service.py .
|
||||
|
||||
#Задаем /var/data как монтируемый
|
||||
VOLUME ["/var/data"]
|
||||
#Задаем /var/result как монтируемый
|
||||
VOLUME ["/var/result"]
|
||||
|
||||
#Задаем команду для выполнения программы
|
||||
CMD ["python", "service.py"]
|
45
karamushko_maxim_lab_2/service2/service.py
Normal file
45
karamushko_maxim_lab_2/service2/service.py
Normal file
@ -0,0 +1,45 @@
|
||||
# Путь к файлу для чтения
|
||||
path = "/var/data/data.txt"
|
||||
|
||||
# Путь к файлу для записи
|
||||
resultPath = "/var/result/result.txt"
|
||||
|
||||
|
||||
def findMaxNum(path):
|
||||
try:
|
||||
with open(path, "r") as f:
|
||||
numbers = [int(line.strip()) for line in f.readlines()]
|
||||
|
||||
maxNum = max(numbers)
|
||||
return maxNum
|
||||
|
||||
except ValueError as e:
|
||||
print(f"Ошибка преобразования строки: {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка чтения файла '{path}': {e}")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def printRes(resultPath, result):
|
||||
try:
|
||||
with open(resultPath, "w") as f:
|
||||
f.write(str(result))
|
||||
|
||||
print(f"Результат '{result}' успешно передан в '{resultPath}'.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка фиксации результата в файл '{resultPath}': {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
maxNum = findMaxNum(path)
|
||||
|
||||
if maxNum is not None:
|
||||
printRes(resultPath, maxNum ** 2)
|
||||
print(maxNum ** 2)
|
||||
|
||||
else:
|
||||
print("Нет чисел в файле.")
|
Loading…
Reference in New Issue
Block a user