为什么 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()
的界面要求你写一个string,总是:
file.write(str)
Write a string to the file.
强调我的。
这是一个实现细节,StringIO()
非字符串 happen 可以正常工作。代码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
关于Python StringIO.write 不喜欢整数零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513753/