Python 3中的io.StringIO vs open()

sch*_*tte 1 python python-3.x

我能找到的就是这句话:

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

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

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

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

但是,这根本没有给我什么时候应该使用open(),io.StringIO反之亦然.我知道他们在幕后的工作方式并不完全相同.但是为什么有人会open()用Python 3呢?

jfe*_*ard 8

区别在于: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']]
Run Code Online (Sandbox Code Playgroud)

它非常有用,因为您可以使用预期文件的字符串.

在通常的情况下,使用磁盘上的csv文件,您可以编写如下内容:

with open(<path/to/file.csv>, ...) as f:
    reader = csv.reader(f, ...)
Run Code Online (Sandbox Code Playgroud)

  • `open` 和 `StringIO` 都接受字符串。区别在于它们对字符串的处理方式。 (2认同)