简体   繁体   中英

Extract particular file from zip blob stored in azure container with python using Jupyter notebook

I had uploaded zip file in my azure account as a blob in azure container. Zip file contains .csv, .ascii files and many other formats. I need to read specific file, lets say ascii file data containing in zip file. I am using python for this case.

How to read particular file data from this zip file without downloading it on local? I would like to handle this process in memory only.

I am also trying with jypyter notebook provided by azure for ML functionality I am using ZipFile python package for this case.

Request you to assist in this matter to read the file

Please find following code snippet.

blob_service=BlockBlobService(account_name=ACCOUNT_NAME,account_key=ACCOUNT_KEY)
blob_list=blob_service.list_blobs(CONTAINER_NAME)

allBlobs = []
for blob in blob_list:
    allBlobs.append(blob.name)
sampleZipFile = allBlobs[0]
print(sampleZipFile) 

The below code should work. This example accesses an Azure Container using an Account URL and Key combination.

from azure.storage.blob import BlobServiceClient
from io import BytesIO
from zipfile import ZipFile

key = r'my_key'

service = BlobServiceClient(account_url="my_account_url",
                            credential=key
                            )

container_client = service.get_container_client('container_name')

zipfilename = 'myzipfile.zip'

blob_data = container_client.download_blob(zipfilename)
blob_bytes = blob_data.content_as_bytes()
inmem = BytesIO(blob_bytes)
myzip = ZipFile(inmem)

otherfilename = 'mycontainedfile.csv'

filetoread = BytesIO(myzip.read(otherfilename))

Now all you have to do is pass filetoread into whatever method you would normally use to read a local file (eg. pandas.read_csv() )

you could use below code for reading file inside .zip file without extracting in python

import zipfile
archive = zipfile.ZipFile('images.zip', 'r')
imgdata = archive.read('img_01.png')

For details , you can refer to ZipFile docs here

Alternatively, you can do something like this

- - coding: utf-8 - -

""" Created on Mon Apr 1 11:14:56 2019

@author: moverm """

import zipfile

zfile = zipfile.ZipFile('C:\\LAB\Pyt\sample.zip')
for finfo in zfile.infolist():
    ifile = zfile.open(finfo)
    line_list = ifile.readlines()
    print(line_list)

Here is the output for the same

在此输入图像描述

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM