Pep*_*eng 5 python azure azure-blob-storage
我有一个用于数据处理的 python 代码,我想使用 azure 块 blob 作为代码的数据输入,需要指定,来自块 blob 的 csv 文件。将 csv 文件从 azure blob 下载到本地路径很好,如果在本地运行,还可以为 python 代码上传其他方式,但问题是我的代码在 azure 虚拟机上运行,因为它对我的 Apple Air 来说非常重,pandas read_csv在这种情况下,来自本地路径不起作用,因此我必须通过流下载和上传 csv 文件并将其更新到 azure 存储,而无需本地保存。下载和上传 csv 的体积都非常小,远小于 blob 块限制
没有那么多教程来解释如何逐步执行此操作,MS Docs 通常也很难解释,我的最小代码如下:
用于从 azure blob 存储下载
from azure.storage.blob import BlockBlobService
storage = BlockBlobService(account_name='myname', account_key = 'mykey')
#here i don't know how to make a csv stream that could could be used in next steps#
file = storage.get_blob_to_stream('accountname','blobname','stream')
df = pd.read_csv(file)
#df for later steps#
Run Code Online (Sandbox Code Playgroud)
用于通过数据帧从代码按流上传和更新 blob
df #dataframe generated by code
'i don't know how to do the preparation steps for df and the final fire up operation'
storage.put_blob_to_list _by_stream('accountname','blobname','stream')
Run Code Online (Sandbox Code Playgroud)
能否请您为我制作一个分步教程,因为 ppl 有 azure blob 的经验,这应该不是很困难。
或者如果你有更好的解决方案,而不是在我的情况下使用 blob,请放弃一些点击。谢谢。
所以文档还在进行中,我觉得越来越好了……有用的链接:
要将文件作为流从 blob 存储下载,您可以使用BytesIO:
from azure.storage.blob import BlockBlobService
from io import BytesIO
from shutil import copyfileobj
with BytesIO() as input_blob:
with BytesIO() as output_blob:
block_blob_service = BlockBlobService(account_name='my_account_name', account_key='my_account_key')
# Download as a stream
block_blob_service.get_blob_to_stream('mycontainer', 'myinputfilename', input_blob)
# Do whatever you want to do - here I am just copying the input stream to the output stream
copyfileobj(input_blob, output_blob)
...
# Create the a new blob
block_blob_service.create_blob_from_stream('mycontainer', 'myoutputfilename', output_blob)
# Or update the same blob
block_blob_service.create_blob_from_stream('mycontainer', 'myinputfilename', output_blob)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14202 次 |
| 最近记录: |