Чтобы прочитать сжатый zip-файл csv-файла с пандами в моем локальном блокноте Jupyter, я выполняю:
import pandas as pd
pd.read_csv('csv_file.zip')
Однако в Watson Studio read_csv()
выдает исключение, когда я заменяю имя файла потоковым объектом хранения облачного объекта.
Это первая ячейка моего ноутбука в Watson Studio:
import types
from ibm_botocore.client import Config
import ibm_boto3
def __iter__(self): return 0
client = ibm_boto3.client(service_name='s3', ibm_api_key_id='...',
ibm_auth_endpoint="...", config=Config(signature_version='oauth'),
endpoint_url='...')
body = client.get_object(Bucket='...', Key='csv_file.zip')['Body']
if not hasattr(body, "__iter__"):
body.__iter__ = types.MethodType( __iter__, body )
Теперь, когда я пытаюсь:
import pandas as pd
df = pd.read_csv(body)
Я получаю:
'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte
Если я укажу compression='zip'
:
import pandas as pd
df = pd.read_csv(body, compression='zip')
сообщение:
'StreamingBody' object has no attribute 'seek'
Есть ли прямой путь к read_csv()
заархивированному файлу в Watson Studio без явного написания кода для распаковки?
(pd.__version__
равно 0.21.0
в обеих средах.)