Модуль Python io позволяет нам управлять операциями ввода и вывода, связанными с файлами. Преимущество использования модуля IO заключается в том, что доступные классы и функции позволяют расширить функциональность для записи данных в кодировке Unicode.
Модуль Python IO
Существует множество способов использования модуля io для выполнения потоковых и буферных операций в Python. Мы продемонстрируем здесь множество примеров, чтобы подтвердить это утверждение. Давайте начнем.
Python BytesIO
Точно так же, как мы делаем с переменными, данные могут храниться в виде байтов в буфере в памяти при использовании операций ввода-вывода Byte IO модуля io. Вот пример программы для демонстрации этого:
import io
stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())
Давайте посмотрим на вывод этой программы: Функция
getvalue()
просто берет значение из буфера как строку.
Python StringIO
Мы даже можем использовать StringIO
, который в использовании крайне похож на BytesIO
. Вот пример программы:
import io
data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)
print(data.getvalue())
data.close()
Давайте посмотрим вывод этой программы: Обратите внимание, что мы даже закрыли буфер после завершения работы с ним. Это помогает экономить память буфера, так как они хранят данные в памяти. Также мы использовали метод print с необязательным аргументом для указания потока ввода-вывода переменной, что отлично совместимо с оператором вывода.
Чтение с использованием StringIO
После того как мы записали некоторые данные в буфер StringIO, мы также можем их прочитать. Давайте посмотрим на отрывок кода:
import io
input = io.StringIO('This goes into the read buffer.')
print(input.read())
Давайте посмотрим вывод этой программы:
Чтение файла с использованием StringIO
Также возможно читать файл и передавать его по сети в виде байтов. Модуль io можно использовать для преобразования медиафайла, например, изображения, в байты. Вот пример программы:
import io
file = io.open("whale.png", "rb", buffering = 0)
print(file.read())
Давайте посмотрим вывод этой программы: Для запуска этой программы у нас в текущем каталоге должен быть файл изображения whale.png.
io.open() против os.open()
Функция io.open()
является более предпочтительным способом выполнения операций ввода-вывода, поскольку она создана как высокоуровневый интерфейс для работы с файлами. Она инкапсулирует дескриптор файла на уровне операционной системы в объект, который мы можем использовать для доступа к файлу в стиле Python. Функция os.open()
заботится о более низкоуровневом системном вызове POSIX. Она принимает аргументы на основе POSIX и возвращает дескриптор файла, который представляет открытый файл. Она не возвращает объект файла; возвращаемое значение не будет иметь функций read()
или write()
. В целом, функция io.open()
является всего лишь оболочкой над функцией os.open()
. Функция os.open()
также устанавливает конфигурацию по умолчанию, такую как флаги и режим, в то время как io.open()
этого не делает и зависит от переданных ей значений.
Вывод
В этом уроке мы изучали простые операции модуля ввода-вывода Python и то, как мы можем управлять символами Unicode с помощью BytesIO. Однако, если вы ищете полные операции с файлами, такие как удаление и копирование файла, то прочтите чтение файла Python. Ссылка: Документация по API
Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio