Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让arff.loadarff与urllib.request一起使用以从URL读取arff文件?_Python_Python 3.x_Urllib_Arff - Fatal编程技术网

Python 如何让arff.loadarff与urllib.request一起使用以从URL读取arff文件?

Python 如何让arff.loadarff与urllib.request一起使用以从URL读取arff文件?,python,python-3.x,urllib,arff,Python,Python 3.x,Urllib,Arff,关于从URL获取arff.loadarff的最佳方法有什么想法吗?我正在尝试从以下URL读取arff文件[使用Python 3.7]: 我尝试了几种方法,核心问题是让urllib.request返回一个文件或类似文件的对象,以便arff.loadarff能够识别并正确读取它 以下是我的一些尝试和结果: from scipy.io import arff import urllib.request url = "https://archive.ics.uci.edu/ml/machine-lea

关于从URL获取
arff.loadarff
的最佳方法有什么想法吗?我正在尝试从以下URL读取arff文件[使用Python 3.7]:

我尝试了几种方法,核心问题是让urllib.request返回一个文件或类似文件的对象,以便arff.loadarff能够识别并正确读取它

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

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)
这会给出一个错误TypeError,因为urlopen返回一个响应对象

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

但这也会产生一个类型错误,因为codecdes.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文件作为文件名,我得到一个错误,即文件名太长。

您就快到了
loadarff()
需要一个类似文本文件的对象,它既不能
urlopen()
也不能满足
decode()
的结果。因此,方法是使用
io.StringIO()
将文本字符串内容包装到类似文件的对象中:


类似文件的对象在这里意味着可以执行
x.read()
并返回字符串的
x
对象,就像通过
open(filename)
返回的文件对象一样
loadarff()
需要一个类似文本文件的对象,它既不能
urlopen()
也不能满足
decode()
的结果。因此,方法是使用
io.StringIO()
将文本字符串内容包装到类似文件的对象中:

类似文件的对象在这里意味着可以执行
x.read()
并返回字符串的
x
对象,就像打开(文件名)

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'))
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')))