python - 从 URL 读取 Tarfile
问题描述
尝试从 URL 读取 tarfile
主要是从网站上抓取数据。甚至尝试使用 gzip 打开文件,但它会产生类似的相同错误。请为此提出解决方案。
import tarfile
from io import BytesIO
import urllib.request as urllib2
rt = urllib2.urlopen("https://opentender.eu/data/files/CY_ocds_data.json.tar.gz").read()
csvzip = tarfile.open(BytesIO(rt),mode='r:gz')
这是产生类型错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-2ed9e3f5bdd6> in <module>()
4 import urllib.request as urllib2
5 rt = urllib2.urlopen("https://opentender.eu/data/files/CY_ocds_data.json.tar.gz").read()
----> 6 csvzip = tarfile.open(BytesIO(rt),mode='r:gz')
7 # csvzip.printdir()
2 frames
/usr/lib/python3.7/gzip.py in __init__(self, filename, mode, compresslevel, fileobj, mtime)
166 mode += 'b'
167 if fileobj is None:
--> 168 fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
169 if filename is None:
170 filename = getattr(fileobj, 'name', '')
TypeError: expected str, bytes or os.PathLike object, not _io.BytesIO
解决方案
您必须tarfile.open
使用fileobj
关键字参数调用:
csvzip = tarfile.open(fileobj=BytesIO(rt),mode='r:gz')
推荐阅读
- swift - 如何确定某个属性是否在用户的表中?
- node.js - Decrypt base64 ciphertext with nodejs
- python - ValueError: time data does not match
- bluetooth-lowenergy - BLE 将私有特征写入 UUID
- python - 我需要 CSV 数据的双引号
- json - 如何使用 jq 将多个字段连接到同一行
- javascript - 试图发出频道创建命令,但出现错误
- python - 组合二维 numpy 数组的列表
- excel - 在每个第 n 个单词之后如何将单元格中的字符串拆分为行
- html - html在哪里?源几乎是空的