Python StringIO.write 不喜欢整数零?
Python StringIO.write doesn't like integer zero?
为什么 stream.write 几乎可以输出零以外的任何值?
from StringIO import StringIO
v0 = 0
v1 = 1
a = [1, 0, v1, v0, "string", 0.0, 2.0]
stream = StringIO()
for v in a:
stream.write(v)
stream.write('\n')
print stream.getvalue()
使用 Python 2.7.6,运行 此代码生成:
1
1
string
2.0
它看起来像是在 StringIO.py,第 214 行(函数 write
):
if not s: return
(s
是您传递给 write
的内容)。
换句话说,'falsy' 个值(例如 None、[]、0 等)将被丢弃。
fileobj.write()
的接口要求您编写一个 字符串 ,总是:
file.write(str)
Write a string to the file.
强调我的。
这是一个实现细节,对于 StringIO()
非字符串 恰好 起作用。代码 optimises the 'empty string' case 使用:
if not s: return
以避免进行不必要的字符串连接。这意味着如果您传入任何 falsey 值,例如数字 0 或 None
或空容器,则不会进行写入。
在写入之前将您的对象转换为字符串:
for v in a:
stream.write(str(v))
stream.write('\n')
如果您在此处使用 C 优化版本,则会出现错误:
>>> from cStringIO import StringIO
>>> f = StringIO()
>>> f.write(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string or buffer, not int
为什么 stream.write 几乎可以输出零以外的任何值?
from StringIO import StringIO
v0 = 0
v1 = 1
a = [1, 0, v1, v0, "string", 0.0, 2.0]
stream = StringIO()
for v in a:
stream.write(v)
stream.write('\n')
print stream.getvalue()
使用 Python 2.7.6,运行 此代码生成:
1
1
string
2.0
它看起来像是在 StringIO.py,第 214 行(函数 write
):
if not s: return
(s
是您传递给 write
的内容)。
换句话说,'falsy' 个值(例如 None、[]、0 等)将被丢弃。
fileobj.write()
的接口要求您编写一个 字符串 ,总是:
file.write(str)
Write a string to the file.
强调我的。
这是一个实现细节,对于 StringIO()
非字符串 恰好 起作用。代码 optimises the 'empty string' case 使用:
if not s: return
以避免进行不必要的字符串连接。这意味着如果您传入任何 falsey 值,例如数字 0 或 None
或空容器,则不会进行写入。
在写入之前将您的对象转换为字符串:
for v in a:
stream.write(str(v))
stream.write('\n')
如果您在此处使用 C 优化版本,则会出现错误:
>>> from cStringIO import StringIO
>>> f = StringIO()
>>> f.write(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string or buffer, not int