def string_stream(s, separators="\n"):
start = 0
for end in range(len(s)):
if s[end] in separators:
yield s[start:end]
start = end + 1
if start < end:
yield s[start:end+1]
示例用法:
>>> stream = string_stream("foo\tbar\nbaz\n", "\t\n")
>>> for s in stream:
... print(s)
...
foo
bar
baz
你可以用这样一个简单的generator function滚动你自己的:
示例用法:
cStringIO可能更快(我还没有测试过),但这将使您在定义/使用分隔符时具有灵活性。
是的,除非你真的想把它列入名单。
如果它打算一行一行地被消费,那么你这样做是有意义的。
StringIO()
创建类似文件的对象。文件对象有一个方法
.readlines()
,它将对象具体化为一个列表。不必具体化列表中的数据,您可以对其进行迭代,这是更轻松的内存:在这里,我们将每一行追加到列表中,这样我们就可以演示如何遍历类似文件的对象并对数据保持一个句柄。(更有效的方法是
list(file_like_io)
。现在:
您可以使用
seek
将io返回到任何索引点:如果你真的想在名单上
.readlines()
将StringIO
迭代器具体化,就像一个迭代器那样list(io)
-这被认为不太可取。我们可以看到我们的结果是一样的:
请记住,它是在换行符之后拆分的,同时也将它们保留在文本中,因此每打印一行将得到两个换行符,打印时为两倍间距。
相关问题 更多 >
编程相关推荐