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 – Более быстрая версия StringIO¶cStringIO – 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()