Python StringIO.write 不喜欢整数零?



为什么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

fileobj.write()的接口要求您编写字符串,始终:

file.write(str)
向文件中写入字符串

强调我的。

这是一个实现细节,对于StringIO()非字符串,只有发生才能工作。该代码通过使用优化"空字符串"情况

if not s: return

以避免进行不必要的字符串串联。这意味着,如果传入任何false值,例如数字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

它看起来像是在StringIO.py的第214行(函数write):

if not s: return

s是您传递给write的内容)。

换句话说,"falsy"值(如None、[]、0等)将被丢弃。

相关内容

  • 没有找到相关文章

最新更新