7.5. StringIO — 将字符串作为文件读取和写入 — Python 文档
7.5. 字符串IO — 将字符串作为文件读取和写入
该模块实现了一个类似文件的类 StringIO,它读取和写入字符串缓冲区(也称为 内存文件 )。 请参阅操作文件对象的说明(部分 文件对象 )。 (对于标准字符串,请参阅 str 和 unicode。)
- class StringIO.StringIO([buffer])
创建 StringIO 对象时,可以通过将字符串传递给构造函数将其初始化为现有字符串。 如果没有给出字符串,StringIO 将从空开始。 在这两种情况下,初始文件位置都从零开始。
StringIO 对象可以接受 Unicode 或 8 位字符串,但混合这两者可能需要小心。 如果两者都使用,则无法解释为 7 位 ASCII(使用第 8 位)的 8 位字符串将导致在调用 getvalue() 时引发
UnicodeError
。
StringIO对象的以下方法需要特别说明:
- StringIO.getvalue()
- 在调用 StringIO 对象的 close() 方法之前,随时检索“文件”的全部内容。 有关混合 Unicode 和 8 位字符串的信息,请参阅上面的注释; 这种混合会导致此方法升高
UnicodeError
。
- StringIO.close()
- 释放内存缓冲区。 尝试对关闭的 StringIO 对象执行进一步操作将引发
ValueError
。
用法示例:
import StringIO
output = StringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'
# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()
# Close object and discard memory buffer --
# .getvalue() will now raise an exception.
output.close()
7.6. 字符串IO — 更快的版本字符串IO
模块 cStringIO 提供了一个类似于 StringIO 模块的接口。 大量使用 StringIO.StringIO 对象可以通过使用该模块中的函数 StringIO() 来提高效率。
- cStringIO.StringIO([s])
返回一个类似于 StringIO 的流以进行读取或写入。
由于这是一个返回内置类型对象的工厂函数,因此无法使用子类化来构建您自己的版本。 无法在其上设置属性。 在这些情况下使用原始的 StringIO 模块。
与 StringIO 模块不同,该模块无法接受无法编码为纯 ASCII 字符串的 Unicode 字符串。
与 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.'
# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()
# Close object and discard memory buffer --
# .getvalue() will now raise an exception.
output.close()