Подтвердить что ты не робот

Какая разница между io.open() и os.open() на Python?

Я понял, что функция open(), которую я использовал, была псевдонимом io.open(), а импорт * из os затмил бы это.

В чем разница между открытием файлов через модуль io и os?

4b9b3361

Ответ 1

io.open() является предпочтительным интерфейсом более высокого уровня для ввода/вывода файлов. Он обертывает дескриптор файла уровня ОС в объекте, который вы можете использовать для доступа к файлу с помощью Pythonic.

os.open() - это всего лишь оболочка для низкоуровневого SOS-сервера POSIX. Он принимает меньше символических (и более POSIX-y) аргументов и возвращает дескриптор файла (число), представляющий открытый файл. Он не возвращает файл-объект; возвращаемое значение не будет иметь методов read() или write().

Из os.open() документация:

Эта функция предназначена для ввода/вывода низкого уровня. Для нормального использования используйте встроенную функцию open(), которая возвращает "файловый объект" с методами read() и write() (и многие другие).

Ответ 2

Абсолютно все

  • os.open() принимает имя файла как строку, режим файла как побитовую маску атрибутов и необязательный аргумент, который описывает биты разрешения файла, и возвращает дескриптор файла как целое число.

  • io.open() принимает имя файла как строку или дескриптор файла как целое число, режим файла как строку и необязательные аргументы, которые описывают кодировку файла, используемую буферизацию, как обрабатываются ошибки кодирования и переводы строк, и, если FD закрывается, когда файл закрывается, и возвращает какого-то потомка io.IOBase.

Ответ 3

os.open очень похож на open() на C в Unix. Вы вряд ли захотите использовать его, если не делаете что-то гораздо более низкоуровневое. Он дает вам фактический дескриптор файла (как в, число, а не объект).

io.open - ваш основной Python open() и то, что вы хотите использовать примерно все время.

Ответ 4

os.open() метод открывает файл файла и устанавливает различные флаги в соответствии с флагами и, возможно, его режимом в соответствии с режимом.

Режим по умолчанию - 0777 (восьмеричный), а текущее значение маски маскируется.

Этот метод возвращает дескриптор файла для вновь открытого файла.

В то время,

io.open() метод открывает файл в режиме, указанном в строковом режиме. Он возвращает новый дескриптор файла или, в случае ошибок, nil плюс сообщение об ошибке.

Надеюсь, что это поможет

Ответ 5

Чтобы добавить к существующим ответам:

Я понял, что функция open(), которую я использовал, была псевдонимом io.open()

open() == io.open() в Python 3. В Python 2 они разные.

В то время как с помощью open() в Python мы можем получить простой в использовании файловый объект с удобными методами read() и write(), доступ к файлам на уровне ОС осуществляется с помощью файловых дескрипторов (или файловых дескрипторов в Windows). Таким образом, os.open() должен использоваться неявно под капотом. Я не исследовал исходный код Python в этом отношении, но документация для параметра opener, который был добавлен для open() в Python 3.3, гласит:

Пользовательский открыватель можно использовать, передавая вызываемый элемент как открыватель. Базовый дескриптор файла для объекта file затем получается путем вызова opener с (file, flags). os.open открытия должно возвращать дескриптор открытого файла (передача os.open качестве средства открытия приводит к функциональности, аналогичной передаче None).

Таким образом, os.open() является os.open() открытия по умолчанию для open(), и у нас также есть возможность указать пользовательскую оболочку вокруг него, если необходимо изменить флаги файла или режим. См. Документацию для open() для примера пользовательского открывателя, который открывает файл относительно данного каталога.

Ответ 6

Разработчики баз данных и системных приложений обычно используют open вместо fopen поскольку первый обеспечивает более точный контроль того, когда, что и как должно быть записано содержимое памяти в резервное хранилище (т.е. Файл на диске).

В Unix-подобной операционной системе open используется для открытия обычного файла, конечной точки сокета, устройства, канала и т.д. Положительный номер дескриптора файла возвращается для каждого успешного вызова функции open. Он предоставляет согласованный API и платформу для проверки уведомлений о событиях и т.д. Для различных этих объектов.

Однако fopen - это стандартная функция C, которая обычно используется для открытия обычного файла и возврата структуры данных FILE. fopen, на самом деле, в конце концов вызовет open. fopen достаточно хорош для обычного использования, так как разработчикам не нужно беспокоиться о том, когда записывать или синхронизировать содержимое памяти на диск, и не нужно уведомлять о событиях.