我怎么才能得到装载机一起工作urllib.请求从URL读取arff文件?

2024-04-20 00:45:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有什么想法可以让arff.loadarff从URL工作?{ar7.am正在尝试从下面的Python文件中读取

我试过几种方法,但核心问题是urllib.请求返回一个文件或类似文件的对象,以便装载机能正确识别和阅读。在

以下是我尝试的一些方法和结果:

from scipy.io import arff
import urllib.request

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00327/Training%20Dataset.arff"
response = urllib.request.urlopen(url)
data, meta = arff.loadarff(response)

由于urlopen返回了一个响应对象,因此这将产生一个错误TypeError。在

我还试着遵循公认答案here中的解决方案:

^{pr2}$

但这也会产生一个类型错误,因为编解码器.iterdecode返回生成器。还有这个:

from scipy.io import arff
import urllib.request

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00327/Training%20Dataset.arff"
ftpstream = urllib.request.urlopen(url)
data, meta = arff.loadarff(ftpstream.read().decode('utf-8'))

这将以字符串的形式访问文件,但返回完整的arff文件作为文件名,我得到一个错误,即文件名太长。在


Tags: 文件对象方法fromhttpsioimporturl
1条回答
网友
1楼 · 发布于 2024-04-20 00:45:44

你快到了。loadarff()需要一个类似文本文件的对象,urlopen()和{}的结果都不满足。因此,方法是使用io.StringIO()将文本字符串内容包装到类似文件的对象中:

from scipy.io import arff
import urllib.request
import io # for io.StringIO()

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00327/Training%20Dataset.arff"
ftpstream = urllib.request.urlopen(url)
data, meta = arff.loadarff(io.StringIO(ftpstream.read().decode('utf-8')))

这里的类文件对象表示x可以执行x.read()并返回字符串,就像open(filename)返回的file对象一样

相关问题 更多 >