亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 zipfile 和 scipy.io.arff 從 ZIP 讀取 ARFF

使用 zipfile 和 scipy.io.arff 從 ZIP 讀取 ARFF

森欄 2021-12-09 14:48:51
我想在 scikit-learn 中處理相當大的 ARFF 文件。這些文件位于 zip 存檔中,我不想在處理之前將存檔解壓縮到文件夾中。因此,我使用 Python 3.6 的 zipfile 模塊:from zipfile import ZipFilefrom scipy.io.arff import loadarffarchive = ZipFile( 'archive.zip', 'r' )datafile = archive.open( 'datafile.arff' )data = loadarff( datafile )# …datafile.close()archive.close()但是,這會產生以下錯誤:Traceback (most recent call last):  File "./m.py", line 6, in <module>    data = loadarff( datafile )  File "/usr/lib64/python3.6/site-packages/scipy/io/arff/arffread.py", line 541, in loadarff    return _loadarff(ofile)  File "/usr/lib64/python3.6/site-packages/scipy/io/arff/arffread.py", line 550, in _loadarff    rel, attr = read_header(ofile)  File "/usr/lib64/python3.6/site-packages/scipy/io/arff/arffread.py", line 323, in read_header    while r_comment.match(i):TypeError: cannot use a string pattern on a bytes-like object根據loadarff 文檔,loadarff需要一個類似文件的對象。根據zipfile 文檔,open返回一個類似文件的ZipExtFile.因此,我的問題是如何使用什么ZipFile.open作為 ARFF 輸入返回到loadarff.注意:如果我手動解壓縮并直接使用 加載 ARFF data = loadarff( 'datafile.arff' ),一切都很好。
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

from io import BytesIO, TextIOWrapper

from zipfile import ZipFile

from scipy.io.arff import loadarff


zfile = ZipFile('archive.zip', 'r')

in_mem_fo = TextIOWrapper(BytesIO(zfile.read('datafile.arff')), encoding='utf-8')

data = loadarff(in_mem_fo)

讀zfile入內存BytesIO對象。TextIOWrapper與 一起使用encoding='utf-8'。在loadarff.


編輯:結果zfile.open()返回一個類似文件的對象,因此可以通過以下方式完成上述操作:


zfile = ZipFile('archive.zip', 'r')

in_mem_fo = TextIOWrapper(zfile.open('datafile.arff'), encoding='ascii')

data = loadarff(in_mem_fo)


查看完整回答
反對 回復 2021-12-09
  • 1 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號