В этом задании вам нужно создать интерфейс для работы с файлами. Интерфейс должен предоставлять следующие возможности по работе с файлами:
— чтение из файла, метод read возвращает строку с текущим содержанием файла
— запись в файл, метод write принимает в качестве аргумента строку с новым содержанием файла
— сложение объектов типа File, результатом сложения является объект класса File, при этом создается новый файл и файловый объект, в котором содержимое второго файла добавляется к содержимому первого файла. Новый файл должен создаваться в директории, полученной с помощью функции tempfile.gettempdir. Для получения нового пути можно использовать os.path.join.
— возвращать в качестве строкового представления объекта класса File полный путь до файла
— поддерживать протокол итерации, причем итерация проходит по строкам файла
При создании экземпляра класса File в конструктор передается полный путь до файла на файловой системе. Если файла с таким путем не существует, он должен быть создан при инициализации.
Пример работы:
from os.path import exists, dirname, join import uuid import tempfile class File: def __init__(self, path): self.path = path self.current_position = 0 if not exists(self.path): open(self.path, 'w').close() def write(self, content): with open(self.path, 'w') as f: return f.write(content) def read(self): with open(self.path, 'r') as f: return f.read() def __add__(self, obj): new_path = join(tempfile.gettempdir(), str(uuid.uuid4())) new_file = type(self)(new_path) new_file.write(self.read() + obj.read()) return new_file def __str__(self): return self.path def __iter__(self): return self def __next__(self): with open(self.path, 'r') as f: f.seek(self.current_position) line = f.readline() if not line: self.current_position = 0 raise StopIteration('EOF') self.current_position = f.tell() return line