Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
07 Июл 2023
2 мин
1567

Использование StringIO в Python 3

В одной из проблем, с которой могут столкнуться новички в Python 3, является использование модуля StringIO. Данный модуль позволяет работать с объектами, подобными

В одной из проблем, с которой могут столкнуться новички в Python 3, является использование модуля StringIO. Данный модуль позволяет работать с объектами, подобными файлам, которые используют строки вместо физических дисковых файлов.

В Python 2.x можно было просто написать import StringIO, но в Python 3.x этот модуль был перемещен в библиотеку io. Поэтому для его импорта в Python 3.x необходимо использовать import io.StringIO.

Пример использования

import io

s = io.StringIO()
s.write('Hello World\n')
print(s.getvalue())

В этом примере строка ‘Hello World\n’ записывается в объект StringIO s, а затем выводится с помощью метода getvalue().

Однако, при попытке использовать io.StringIO с некоторыми функциями, например, numpy.genfromtxt, может возникнуть ошибка TypeError: Can't convert 'bytes' object to str implicitly. Это происходит потому, что numpy.genfromtxt ожидает на вход объект файла, способный читать байты, а io.StringIO работает со строками.

Для решения этой проблемы можно использовать io.BytesIO, который работает с байтами, а не со строками. Например:

import io
import numpy

x = "1 3\n 4.5 8"        
numpy.genfromtxt(io.BytesIO(x.encode()))

В этом примере строка x сначала преобразуется в байты с помощью метода encode(), а затем передается в io.BytesIO, который создает объект, подобный файлу, работающий с байтами. Этот объект затем передается в numpy.genfromtxt.

Надеемся, что данная статья поможет разобраться с использованием StringIO и BytesIO в Python 3.

Добавить комментарий

Подарок
Забрать подарок