Шаг 166.
Основы языка Python.
Работа с файлами и каталогами. Класс BytesIO

    На этом шаге мы рассмотрим назначение и использование этого класса.

    Класс StringIO работает только со строками. Чтобы выполнять аналогичные операции с "файлами", представляющими собой последовательности байтов, следует использовать класс BytesIO из модуля io. Формат конструктора класса:

  BytesIO ([<Начальное значение>] )

    Класс BytesIO поддерживает такие же методы, что и класс StringIO, но в качестве значений методы принимают и возвращают последовательности байтов, а не строки. Рассмотрим основные операции на примере:

>>> import io # Подключаем модуль
>>> f =  io.BytesIO(b"String1\n")
>>> f.seek (0, 2)  # Перемещаем указатель в конец "файла"
8
>>> f.write (b"String2\n") # Пишем в "файл"
8
>>> f.getvalue () # Получаем содержимое "файла"
b'String1\nString2\n'
>>> f.seek(0) # Перемещаем указатель в качало "файла"
0
>>> f.read () # Считываем данные
b'String1\nString2\n'
>>> f.close () # Закрываем "файл"

    Класс BytesIO поддерживает также метод getbuffer(), который возвращает ссылку на объект memoryview. С помощью этого объекта можно получать и изменять данные по индексу или срезу, преобразовывать данные в список целых чисел (с помощью метода tolist()) или в последовательность байтов (с помощью метода tobytes()). Пример:

>>> f = io.BytesIO(b"Python")
>>> buf =  f.getbuffer () 
>>> bytes(buf[0:1]) # Получаем первый символ строки
b'P'
>>> buf [0] = b"J"[0] # Изменяем значение по индексу
>>> f.getvalue () # Получаем содержимое
b'Jython'
>>> buf.tolist()  # Преобразуем в список чисел
[74, 121, 116, 104, 111, 110]
>>> buf.tobytes () # Преобразуем в тип bytes
b'Jython'
>>> f.close () # Закрываем "файл"

    На следующем шаге мы рассмотрим права доступа к файлам и каталогам.




Предыдущий шаг Содержание Следующий шаг