Я работаю над улучшением поддержки Python 3.X для PyFilesystem. Это абстракция для файловых систем. Каждый объект файловой системы имеет открытый метод, который возвращает файл-подобный объект.Портирование файла Python 2.x как объекта на Python 3
Проблема, с которой я сталкиваюсь, заключается в том, что открытый метод работает open
на Python 2.X, но я бы хотел, чтобы он работал как io.open
, который возвращает одно из нескольких потоков двоичного или текстового режима.
Что я могу использовать, это способ использования файла-типа Python 2.X и возврата соответствующего объекта io-потока, который читает/записывает в подстилающий файл-подобный объект (но обрабатывает буферизацию/unicode и т. Д., Если обязательный).
Я думал, что-то вроде следующего:
def make_stream(file_object, mode, buffering, encoding):
# return a io instance
Я не вижу прямой вперед способ сделать это с STDLIB. Но это кажется мне чем-то, что модуль io должен делать под капотом, так как его программный уровень обеспечивает функциональность буферизации/юникода.
Да, я знаю. Начиная с версии Python 2.6. Но мне все еще нужно предоставить интерфейс io для файловых объектов. Это не фактические файловые объекты. Данные поступают из разных источников. –
@WillMcGugan: Правильно, я тогда вас неправильно понял. Функция '' '' '' '' '' '' '' 'является просто фабрикой. Он возвращает экземпляры ряда классов. В этом нет ничего волшебного, вы можете просто реализовать одно и то же в своей собственной библиотеке. –
@WillMcGugan: Вы можете использовать абстрактные базовые классы библиотеки io' в качестве шаблона, конечно, чтобы ваши объекты соответствовали ожиданиям. Вы также можете * повторно использовать классы 'io' и текстовые оболочки, если вы предоставите свою собственную реализацию необработанного файлового объекта. –