gpt4 book ai didi

python - 创建流以从 Python 中的字符串迭代

转载 作者:太空狗 更新时间:2023-10-29 19:25:33 37 4
gpt4 key购买 nike

我想在 Python 中从字符串创建一个流,这样它就相当于读取字符串,就好像它是从文本文件中读取的一样。像这样的东西:

for line in open('myfile.txt'): print line

除了 'myfile.txt' 的内容存储在字符串 s 中。这是正确/最好的方法吗?

s = StringIO.StringIO("a\t\b\nc\td\n")
for line in s: print line

最佳答案

I want to create a stream from a string in Python so that it's equivalent to reading the string as if it's read from a text file.

Is this the correct/best way to do it?

是的,除非您确实希望它出现在列表中。

如果它打算逐行使用,那么您这样做的方式是有道理的。

StringIO() 创建一个类似文件的对象。

文件对象有一个方法,.readlines(),它将对象具体化为一个列表。您可以遍历它,而不是具体化列表中的数据,这样更省内存:

# from StringIO import StringIO # Python 2 import
from io import StringIO # Python 3 import

txt = "foo\nbar\nbaz"

这里我们将每一行附加到一个列表中,这样我们就可以演示如何遍历类似文件的对象并保持对数据的处理。 (效率更高的是 list(file_like_io)

m_1 = []
file_like_io = StringIO(txt)
for line in file_like_io:
m_1.append(line)

现在:

>>> m_1
['foo\n', 'bar\n', 'baz']

您可以使用seek 将您的io 返回到任何索引点:

>>> 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

请记住,它是在换行符之后拆分的,并将它们也保留在文本中,因此每打印一行都会有两个换行符,打印时双倍行距。

关于python - 创建流以从 Python 中的字符串迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21843693/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com