лаба 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