【问题标题】:io.StringIO vs open() in Python 3Python 3 中的 io.StringIO 与 open()
【发布时间】:2018-05-18 19:56:47
【问题描述】:

我能找到的只有这个statement

创建文本流最简单的方法是使用 open(),可选 指定编码:

f = open("myfile.txt", "r", encoding="utf-8")

内存中的文本流也可用作 StringIO 对象:

f = io.StringIO("some initial text data")

但这根本无法说明何时应该使用open() 而不是io.StringIO,反之亦然。我知道它们在幕后的工作方式并不完全相同。但是为什么有人会在 Python 3 中选择 open() 呢?

【问题讨论】:

  • 尝试过io.StringIO打开文件吗?
  • 提问者没有指定他们正在尝试专门打开文件。
  • @Aran-Fey 你试过阅读这篇文章吗?
  • 嗯,是的,我有。你说你不知道什么时候用哪个。如果您尝试同时使用它们,您会很快找到答案。
  • @Aran-Fey 我很高兴下面的答案在那里,因为这正是我想知道使用哪个的情况。考虑到在这种情况下两种输出完全相同,我认为知道有什么区别是相关的。我真的不明白你为什么假装我没有尝试过。

标签: python python-3.x


【解决方案1】:

不同之处在于:open 采用文件名(以及其他一些参数,如模式或编码),io.StringIO 采用纯字符串并且都返回类似文件的对象。

因此:

  • 使用open读取文件;
  • 当您需要类似文件的对象并且想要传递字符串的内容时,请使用StringIO

StringIO 的示例:

import csv
import io

reader = csv.reader(io.StringIO("a,b,c\n1,2,3"))
print ([r for r in reader])
# output [['a', 'b', 'c'], ['1', '2', '3']]

它非常有用,因为您可以在需要文件的地方使用字符串。

在通常情况下,如果您的磁盘上有一个 csv 文件,您会编写如下内容:

with open(<path/to/file.csv>, ...) as f:
    reader = csv.reader(f, ...)

【讨论】:

  • Consice 和很好的例子(正是把我带到这里的那个)谢谢!
  • openStringIO 都带字符串。不同之处在于它们对字符串的处理方式。
  • @user2357112 对!我将编辑我的答案以添加此精度!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2012-03-11
  • 1970-01-01
  • 2018-11-13
  • 2016-02-26
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多