Python StringIO.write 不喜欢整数零?

标签 python stream stringio

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

相关文章:

java - System.out 重定向到 JTextPane

python - 从 URL 读取 ZipFile 到 StringIO 并用 panda.read_csv 解析

python - Pandas 数据框列值与列表中的元素明智数字比较

python - Django 管理添加页面,如何自动填充最新数据(0002)+1=0003

python - 在数据流中寻找一系列模式

python - 使用流重定向 python 日志消息

python - "I/O operation on closed file"在 Django View 测试中使用 StringIO

python - 无法解压不可迭代对象/遍历python中的对象数组

python - 加入多处理超时

sql-server - Node +SQL Server : Get row data as stream