7.5. StringIO — 将字符串作为文件读取和写入 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/stringio
跳转至:导航、​搜索

7.5. 字符串IO — 将字符串作为文件读取和写入

该模块实现了一个类似文件的类 StringIO,它读取和写入字符串缓冲区(也称为 内存文件 )。 请参阅操作文件对象的说明(部分 文件对象 )。 (对于标准字符串,请参阅 strunicode。)

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() 会创建一个只读对象。 与不带字符串参数创建的对象不同,它没有写入方法。 这些对象通常不可见。 它们在回溯中出现为 StringIStringO

还提供了以下数据对象:

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()