Поиск по сайту:

Python io — BytesIO, StringIO


Модуль Python io позволяет нам управлять операциями ввода и вывода, связанными с файлами. Преимущество использования модуля ввода-вывода заключается в том, что доступные классы и функции позволяют нам расширить функциональность, чтобы включить запись в данные Unicode.

Модуль ввода-вывода Python

Есть много способов, которыми мы можем использовать модуль io для выполнения операций с потоком и буфером в Python. Мы продемонстрируем здесь множество примеров, чтобы доказать это. Давайте начнем.

Python BytesIO

Точно так же, как мы делаем с переменными, данные могут храниться в виде байтов в буфере в памяти, когда мы используем операции Byte IO модуля io. Вот пример программы, чтобы продемонстрировать это:

import io

stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())

Python StringIO

Мы даже можем использовать StringIO, что очень похоже на использование BytesIO. Вот пример программы:

import io

data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

Чтение с использованием 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())

io.open() против os.open()

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

Заключение

В этом уроке мы изучили простые операции модуля ввода-вывода Python, а также то, как мы можем управлять символами Unicode с помощью BytesIO. Однако, если вам нужны полные операции с файлами, такие как удаление и копирование файла, прочитайте API Doc.