我想在 Python 中从字符串创建一个流,这样就相当于读取字符串,就像从文本文件中读取字符串一样。
这是正确/最好的方法吗?
是的,除非您确实希望将其放在列表中。
如果打算逐行使用它,那么您这样做的方式是有意义的。
StringIO()
创建一个类似文件的对象。
文件对象有一个方法,.readlines()
,将对象具体化为列表。您可以迭代它,而不是具体化列表中的数据,这样更省内存:
# from StringIO import StringIO # Python 2 import
from io import StringIO # Python 3 import
txt = "foo\nbar\nbaz"
在这里我们附加每一行into一个列表,以便我们可以演示迭代类似文件的对象并保留数据的句柄。 (更有效的是list(file_like_io)
.
m_1 = []
file_like_io = StringIO(txt)
for line in file_like_io:
m_1.append(line)
and now:
>>> m_1
['foo\n', 'bar\n', 'baz']
您可以将 io 返回到任何索引点seek
:
>>> file_like_io.seek(0)
>>> file_like_io.tell() # where we are in the object now
0
如果你真的想把它放在一个列表中
.readlines()
实现了StringIO
迭代器就像一个人所做的那样list(io)
- 这被认为不太优选。
>>> m_2 = file_like_io.readlines()
我们可以看到我们的结果是相同的:
>>> m_1 == m_2
True
请记住,它在换行符之后分割,并将它们保留在文本中,因此每个打印行都会有两个换行符,打印时双倍行距。