首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cStringIO和foreach循环的Python

使用cStringIO和foreach循环的Python
EN

Stack Overflow用户
提问于 2016-11-11 15:50:16
回答 3查看 402关注 0票数 1

我想迭代行cStringIO对象,但是它似乎不适用于foreach循环。更准确地说,这种行为就好像集合是空的。我做错了什么?

示例:

代码语言:javascript
复制
Python 2.7.12 (default, Aug 29 2016, 16:51:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cStringIO
>>> s = cStringIO.StringIO()
>>> import os
>>> s.write("Hello" + os.linesep + "World" + os.linesep)
>>> s.getvalue()
'Hello\nWorld\n'
>>> for line in s :
...     print line
...
>>>

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-11 17:39:57

cStringIO.StringIO返回cStringIO.InputType对象(即输入流)(如果提供string else )或返回cStringIO.OutputType对象(即输出流)。

代码语言:javascript
复制
In [13]: sio = cStringIO.StringIO()

In [14]: sio??
Type:        StringO
String form: <cStringIO.StringO object at 0x7f63d418f538>
Docstring:   Simple type for output to strings.

In [15]: isinstance(sio, cStringIO.OutputType)
Out[15]: True

In [16]: sio = cStringIO.StringIO("dsaknml")

In [17]: sio??
Type:        StringI
String form: <cStringIO.StringI object at 0x7f63d4218580>
Docstring:   Simple type for treating strings as input file streams

In [18]: isinstance(sio, cStringIO.InputType)
Out[18]: True

因此,您可以执行读操作或写操作,但不能同时执行这两种操作。对cStringIO.OutputType对象执行读取操作的一个简单解决方案是通过getvalue()方法将其转换为值。

如果尝试同时执行这两个操作,那么它们中的任何一个都会被忽略。

代码语言:javascript
复制
cStringIO.OutputType.getvalue(c_string_io_object)
票数 2
EN

Stack Overflow用户

发布于 2016-11-11 15:56:37

尝试使用字符串split方法:

代码语言:javascript
复制
for line in s.getvalue().split('\n'): print line
...
Hello
World

或者按照建议,如果您总是在新行上拆分:

代码语言:javascript
复制
for line in s.getvalue().splitlines(): print line
票数 1
EN

Stack Overflow用户

发布于 2018-02-07 22:08:28

写入后可以从打开的文件句柄读取内容,但首先必须使用seek(0)方法将指针移回起始位置。这将适用于cStringIO或真正的文件:

代码语言:javascript
复制
import cStringIO
s = cStringIO.StringIO()
s.write("Hello\nWorld\n") # Python automatically converts '\n' as needed 
s.getvalue()
# 'Hello\nWorld\n'
s.seek(0)  # move pointer to start of file
for line in s :
    print line.strip()
# Hello
# World
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40551529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档