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.