我能找到的只有statement:
创建文本流的最简单方法是使用open(),可选 指定编码:
f = open("myfile.txt", "r", encoding="utf-8")
内存中的文本流也可用作StringIO对象:
f = io.StringIO("some initial text data")
但是,当我应该open()
使用io.StringIO
而不是open()
时,这根本没有提供任何见解。我知道他们在幕后的工作方式并不完全相同。但是为什么有人会在Python 3中使用import urllib2
from google.oauth2 import service_account
# Constants
ENDPOINT_URL = 'ml.googleapis.com/v1/projects/{project}/models/{model}:predict?access_token='
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = 'service.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
access_token=credentials.get_access_token()
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(ENDPOINT_URL)
request.get_method = lambda: 'POST'
result = opener.open(request).read()
print(str(result))
?
答案 0 :(得分:7)
区别在于: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, ...)