stringio.md
1> **Источник:** https://python-all.ru/2.7/library/stringio.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 7.5. [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) – Чтение и запись строк как файлов89Этот модуль реализует файлоподобный класс [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO), который читает и записывает строковый буфер (также известный как *файлы в памяти*). Описание операций с файловыми объектами см. в разделе [Файловые объекты](https://python-all.ru/2.7/library/stdtypes.html#bltin-file-objects)). (Для стандартных строк см. [`str`](https://python-all.ru/2.7/library/functions.html#str) и [`unicode`](https://python-all.ru/2.7/library/functions.html#unicode).)1011#### `class StringIO.StringIO([buffer])`1213Когда создаётся объект [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO), его можно инициализировать существующей строкой, передав строку в конструктор. Если строка не задана, [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) будет пустым. В обоих случаях начальная позиция файла равна нулю.1415Объект [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) может принимать как строки Unicode, так и 8-битные строки, но смешивать их нужно с осторожностью. Если используются и те, и другие, 8-битные строки, которые не могут быть интерпретированы как 7-битный ASCII (т.е. используют 8-й бит), при вызове [`getvalue()`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO.getvalue) вызовут исключение [`UnicodeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.UnicodeError).1617Следующие методы объектов [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) требуют особого упоминания:1819#### `StringIO.getvalue()`2021Извлекает всё содержимое «файла» в любое время до вызова метода [`close()`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO.close) объекта [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO). См. примечание выше о смешивании строк Unicode и 8-битных строк; такое смешивание может привести к тому, что этот метод вызовет [`UnicodeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.UnicodeError).2223#### `StringIO.close()`2425Освобождает буфер памяти. Попытка выполнения дальнейших операций с закрытым объектом [`StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) вызовет исключение [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).2627Пример использования:2829```python30import StringIO3132output = StringIO.StringIO()33output.write('First line.\n')34print >>output, 'Second line.'3536# Извлечь содержимое файла – это будет37# 'Первая строка.38Вторая строка.39'40contents = output.getvalue()4142# Закрыть объект и освободить буфер памяти –43# .getvalue() теперь будет вызывать исключение.44output.close()45```4647# 7.6. [`cStringIO`](https://python-all.ru/2.7/library/stringio.html#module-cStringIO) – Более быстрая версия [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO)4849Модуль [`cStringIO`](https://python-all.ru/2.7/library/stringio.html#module-cStringIO) предоставляет интерфейс, аналогичный модулю [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO). Интенсивное использование объектов [`StringIO.StringIO`](https://python-all.ru/2.7/library/stringio.html#StringIO.StringIO) можно сделать более эффективным, используя вместо них функцию [`StringIO()`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) из этого модуля.5051#### `cStringIO.StringIO([s])`5253Возвращает поток, подобный StringIO, для чтения или записи.5455Поскольку это фабричная функция, возвращающая объекты встроенных типов, нельзя создать собственную версию с помощью наследования. Невозможно задать атрибуты для неё. В таких случаях используйте исходный модуль [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO).5657В отличие от модуля [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO), этот модуль не может принимать строки Unicode, которые не могут быть закодированы как простые строки ASCII.5859Ещё одно отличие от модуля [`StringIO`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) заключается в том, что вызов [`StringIO()`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) с параметром-строкой создаёт объект только для чтения. В отличие от объекта, созданного без строкового параметра, у него нет методов записи. Такие объекты обычно не видны. Они появляются в трассировках как `StringI` и `StringO`.6061Также предоставляются следующие объекты данных:6263#### `cStringIO.InputType`6465Объект типа объектов, созданных вызовом [`StringIO()`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) с параметром-строкой.6667#### `cStringIO.OutputType`6869Объект типа объектов, возвращаемых вызовом [`StringIO()`](https://python-all.ru/2.7/library/stringio.html#module-StringIO) без параметров.7071Также существует C API для модуля; за дополнительной информацией обращайтесь к исходному коду модуля.7273Пример использования:7475```python76import cStringIO7778output = cStringIO.StringIO()79output.write('First line.\n')80print >>output, 'Second line.'8182# Извлечь содержимое файла – это будет83# 'Первая строка.84Вторая строка.85'86contents = output.getvalue()8788# Закрыть объект и освободить буфер памяти –89# .getvalue() теперь будет вызывать исключение.90output.close()91```92