Python 如何让arff.loadarff与urllib.request一起使用以从URL读取arff文件?
关于从URL获取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
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')))