创建流以从Python中的字符串进行迭代

2024-01-08

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

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

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

from io import StringIO

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

我想在 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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建流以从Python中的字符串进行迭代 的相关文章

随机推荐

  • Rails - 部署中的失败路由

    我有一个应用程序 其路由文件中包含以下内容 namespace admin do ADMINISTRATIVE ROUTES ONLY root to gt home index resources comments do member d
  • PySpark:向数据框行元素添加新字段

    我有以下元素 a Row ts 1465326926253 myid u 1234567 mytype u good Row是Spark数据框架的Row类 我想追加一个新字段a 以便a看起来像 a Row ts 1465326926253
  • c#:与文件扩展名关联的图标

    在我的应用程序中 我创建扩展名为 mprj 的文件 如何为这种类型的文件分配图标 是否存在合适的 Net 方法 您需要修改注册表项 可以在此处找到如何使用 C 的代码片段 http mel green com 2009 04 c set f
  • 如何管理 std::list 元素作为引用?

    我有以下代码 struct Foo int var1 int var2 friend std ostream operator lt lt std ostream os const Foo s return os lt lt Foo lt
  • 防止 Spring MVC 控制器中的 XSS

    您好 在我的项目 Veracode 中报告了 XSS 问题 CWE ID 80 在我的请求处理程序方法中 RequestMapping value Update mvc public ResponseBody String execute
  • 为什么比较运算符从 C++ 20 的标准库容器中删除?

    我正在浏览参考参数 https en cppreference com w cpp container vector operator cmp看到了vector的比较操作已在 C 20 中删除 并且太空船运算符 lt gt 已被引入 对于许
  • mariadb 服务器:我无法使用“mysql.server stop”停止服务器

    操作系统 10 13 6 几年前我用 homebrew 安装了 mariadb 服务器 但我很少使用它 今天 我尝试使用以下命令启动 mariadb mysql server start 我遇到了很多错误 所以我做了 brew update
  • 初始化参考

    虽然我以为我明白了rvalue and lvalue对于 C 中的语义 我似乎一次又一次地陷入奇怪的例子中 这些例子向我证明我不知道蹲下 然而 有两个非常简单和基本的 我不明白它们是如何工作的 在我编译它们之前 我认为没有一个是可以的 在我
  • 在 shell 脚本中将带引号的参数传递给 C 程序

    我有一个 C 程序 main 它获取以下参数 abc d e f g 由于引用 总共有 4 个参数 我有一个文本文件 每行都有这 4 个参数 我制作了一个 shell 脚本来为每个参数运行 C 程序 bin bash while read
  • Bootstrap 网格拉/推行

    我有一个响应式引导网格 我希望根据设备宽度以不同的顺序显示它 sm 或更低 1 2 3 4 5 6 7 MD 或更高 2 4 6 1 3 5 7
  • Excel宏重复IF和Else

    我目前正在编写一个 Excel VBA 宏脚本 其中将对活动单元格进行简单的 TRUE 或 False 测试 我的问题是 直到列表末尾我才能使其正常工作 它只运行一次并结束程序 我需要这个 VB 脚本来执行 IF ELSE 测试 直到列表底
  • ASM-创建过程[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 设置了阵列A和阵列B 该过程将获取值
  • 如何在 Yocto bitbake 编译步骤中剥离和 objcopy 构建的 .so 文件?

    这个问题源于 我是否需要编辑在 Yocto 中构建 mdns 878 200 35 所需的 patch 文件 https stackoverflow com questions 66400231 do i need to edit the
  • 谷歌怎么能这么快?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 哪些技术和编程决策使 Google 能够如此快速地提供查询服务 每次我搜索某些内容 每天搜索几
  • 使用 Volley 进行令牌认证

    如果我有一个服务器 我可以使用用户名 密码进行身份验证并为后续请求获取身份验证令牌 那么解决此问题的最佳方法是什么 流程应该是这样的 开始请求 如果我们没有身份验证令牌 使用用户名和密码获取它 使用身份验证令牌发出请求 如果请求因令牌过期而
  • 如何杀死一个进程?

    我有两个活动 第一个活动由启动器启动 第二个活动由第一个活动启动 当我杀死process从第一个活动开始 该进程就被终止 但是 当我从第二个活动中杀死它时 系统将立即启动一个新进程和第一个活动 进程的PID改变了 我怎样才能干净利落地完成呢
  • Yii2 URL 映射后缀

    我在 Yii2 中有一些模拟的 URL 映射 urlManager gt enablePrettyUrl gt true showScriptName gt false rules gt pattern gt pages route gt
  • 以 Observables 作为默认值的 Angular 2 Formbuilder

    我对 Angular 2 Form formbuilder 的默认值有疑问 我的默认值是可观察的 我从服务器检索 所以我不能像这样实现它们 export class UserComponent implements OnInit userF
  • Visual Studio 2010 中 Javascript 中的区域/代码崩溃

    是否可以在 Visual Studio 2010 中的 JS 文件中创建代码区域 这个方法 https stackoverflow com questions 1921628 how to implement regions code co
  • 创建流以从Python中的字符串进行迭代

    我想在 Python 中从字符串创建一个流 这样就相当于读取字符串 就像从文本文件中读取字符串一样 就像是 for line in open myfile txt print line 除了 myfile txt 的内容存储在字符串中s 这