Документация Python неофициальный перевод

7.5. StringIO – Чтение и запись строк как файловStringIO – Read and write strings as files

Этот модуль реализует файлоподобный класс StringIO, который читает и записывает строковый буфер (также известный как файлы в памяти). Описание операций с файловыми объектами см. в разделе Файловые объекты). (Для стандартных строк см. str и unicode.)

class StringIO.StringIO([buffer])

Когда создаётся объект StringIO, его можно инициализировать существующей строкой, передав строку в конструктор. Если строка не задана, StringIO будет пустым. В обоих случаях начальная позиция файла равна нулю.

Объект StringIO может принимать как строки Unicode, так и 8-битные строки, но смешивать их нужно с осторожностью. Если используются и те, и другие, 8-битные строки, которые не могут быть интерпретированы как 7-битный ASCII (т.е. используют 8-й бит), при вызове getvalue() вызовут исключение UnicodeError.

Следующие методы объектов StringIO требуют особого упоминания:

StringIO.getvalue()

Извлекает всё содержимое «файла» в любое время до вызова метода close() объекта StringIO. См. примечание выше о смешивании строк Unicode и 8-битных строк; такое смешивание может привести к тому, что этот метод вызовет UnicodeError.

StringIO.close()

Освобождает буфер памяти. Попытка выполнения дальнейших операций с закрытым объектом StringIO вызовет исключение ValueError.

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

import StringIO

output = StringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'

# Извлечь содержимое файла – это будет
# 'Первая строка.
Вторая строка.
'
contents = output.getvalue()

# Закрыть объект и освободить буфер памяти –
# .getvalue() теперь будет вызывать исключение.
output.close()

7.6. cStringIO – Более быстрая версия StringIOcStringIO – Faster version of StringIO

Модуль cStringIO предоставляет интерфейс, аналогичный модулю StringIO. Интенсивное использование объектов StringIO.StringIO можно сделать более эффективным, используя вместо них функцию StringIO() из этого модуля.

cStringIO.StringIO([s])

Возвращает поток, подобный StringIO, для чтения или записи.

Поскольку это фабричная функция, возвращающая объекты встроенных типов, нельзя создать собственную версию с помощью наследования. Невозможно задать атрибуты для неё. В таких случаях используйте исходный модуль StringIO.

В отличие от модуля StringIO, этот модуль не может принимать строки Unicode, которые не могут быть закодированы как простые строки ASCII.

Ещё одно отличие от модуля StringIO заключается в том, что вызов StringIO() с параметром-строкой создаёт объект только для чтения. В отличие от объекта, созданного без строкового параметра, у него нет методов записи. Такие объекты обычно не видны. Они появляются в трассировках как StringI и StringO.

Также предоставляются следующие объекты данных:

cStringIO.InputType

Объект типа объектов, созданных вызовом StringIO() с параметром-строкой.

cStringIO.OutputType

Объект типа объектов, возвращаемых вызовом StringIO() без параметров.

Также существует C API для модуля; за дополнительной информацией обращайтесь к исходному коду модуля.

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

import cStringIO

output = cStringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'

# Извлечь содержимое файла – это будет
# 'Первая строка.
Вторая строка.
'
contents = output.getvalue()

# Закрыть объект и освободить буфер памяти –
# .getvalue() теперь будет вызывать исключение.
output.close()