Tôi đang cố đọc nhiều tệp CSV từ blob Storage bằng Python.
Mã mà tôi đang sử dụng là:
blob_service_client = BlobServiceClient.from_connection_string[connection_str]
container_client = blob_service_client.get_container_client[container]
blobs_list = container_client.list_blobs[folder_root]
for blob in blobs_list:
blob_client = blob_service_client.get_blob_client[container=container, blob="blob.name"]
stream = blob_client.download_blob[].content_as_text[]
Tôi không chắc cách chính xác để lưu trữ các tệp CSV được đọc trong khung dữ liệu gấu trúc.
Tôi đã cố gắng sử dụng:
df = df.append[pd.read_csv[StringIO[stream]]]
Nhưng điều này cho tôi thấy một lỗi.
Bất kỳ ý tưởng làm thế nào tôi có thể làm điều này?
Henry Ecker
32.9K18 Huy hiệu vàng31 Huy hiệu bạc51 Huy hiệu đồng18 gold badges31 silver badges51 bronze badges
hỏi ngày 1 tháng 7 năm 2020 lúc 6:37Jul 1, 2020 at 6:37
Reco Jhonatanreco JhonatanReco Jhonatan
1.3934 Huy hiệu vàng20 Huy hiệu bạc34 Huy hiệu đồng4 gold badges20 silver badges34 bronze badges
0
Bạn có thể tải xuống tệp từ Blob Storage, sau đó đọc dữ liệu vào một dữ liệu gấu trúc từ tệp đã tải xuống.
from azure.storage.blob import BlockBlobService
import pandas as pd
import tables
STORAGEACCOUNTNAME=
STORAGEACCOUNTKEY=
LOCALFILENAME=
CONTAINERNAME=
BLOBNAME=
#download from blob
t1=time.time[]
blob_service=BlockBlobService[account_name=STORAGEACCOUNTNAME,account_key=STORAGEACCOUNTKEY]
blob_service.get_blob_to_path[CONTAINERNAME,BLOBNAME,LOCALFILENAME]
t2=time.time[]
print[["It takes %s seconds to download "+blobname] % [t2 - t1]]
# LOCALFILE is the file path
dataframe_blobdata = pd.read_csv[LOCALFILENAME]
Để biết thêm chi tiết, xem ở đây.
Nếu bạn muốn thực hiện chuyển đổi trực tiếp, mã sẽ giúp. Bạn cần lấy nội dung từ đối tượng Blob và trong get_blob_to_text
không cần tên tệp cục bộ.
from io import StringIO
blobstring = blob_service.get_blob_to_text[CONTAINERNAME,BLOBNAME].content
df = pd.read_csv[StringIO[blobstring]]
Đã trả lời ngày 1 tháng 7 năm 2020 lúc 7:14Jul 1, 2020 at 7:14
import pandas as pd
data = pd.read_csv['blob_sas_url']
URL Blob SAS có thể được tìm thấy bằng cách nhấp chuột phải vào tệp Blob của Portal Azure mà bạn muốn nhập và chọn tạo SAS. Sau đó, nhấp vào Tạo nút mã thông báo SAS và URL và sao chép URL SAS vào mã trên thay cho Blob_SAS_URL.
Đã trả lời ngày 2 tháng 8 năm 2021 lúc 10:58Aug 2, 2021 at 10:58
Bây giờ bạn có thể đọc trực tiếp từ BlobStorage thành một DataFrame Pandas:
mydata = pd.read_csv[
f"abfs://{blob_path}",
storage_options={
"connection_string": os.environ["STORAGE_CONNECTION"]
}]
trong đó blob_path
là đường dẫn đến tệp của bạn, được đưa ra là
df = df.append[pd.read_csv[StringIO[stream]]]
0Đã trả lời ngày 25 tháng 4 lúc 9:42Apr 25 at 9:42
2
Blockblobservice thực sự không được dùng. Tuy nhiên, câu trả lời của @Deepak không phù hợp với tôi. Dưới đây hoạt động:
import pandas as pd
from io import BytesIO
from azure.storage.blob import BlobServiceClient
CONNECTION_STRING=
CONTAINERNAME=
BLOBNAME=
blob_service_client = BlobServiceClient.from_connection_string[CONNECTION_STRING]
container_client = blob_service_client.get_container_client[CONTAINERNAME]
blob_client = container_client.get_blob_client[BLOBNAME]
with BytesIO[] as input_blob:
blob_client.download_blob[].download_to_stream[input_blob]
input_blob.seek[0]
df = pd.read_csv[input_blob]
Đã trả lời ngày 30 tháng 8 lúc 16:47Aug 30 at 16:47
lsl__lsl__lsl__
772 Huy hiệu bạc12 Huy hiệu Đồng2 silver badges12 bronze badges
Các blockblobservice như một phần của kho lưu trữ Azure bị không được dùng. Thay vào đó sử dụng bên dưới:
!pip install azure-storage-blob
from azure.storage.blob import BlobServiceClient
import pandas as pd
STORAGEACCOUNTURL=
STORAGEACCOUNTKEY=
LOCALFILENAME=
CONTAINERNAME=
BLOBNAME=
#download from blob
blob_service_client_instance=BlobServiceClient[account_url=STORAGEACCOUNTURL, credential=STORAGEACCOUNTKEY]
blob_client_instance = blob_service_client_instance.get_blob_client[CONTAINERNAME, BLOBNAME, snapshot=None]
with open[LOCALFILENAME, "wb"] as my_blob:
blob_data = blob_client_instance.download_blob[]
blob_data.readinto[my_blob]
#import blob to dataframe
df = pd.read_csv[LOCALFILENAME]
LocalFilename giống như blobname
Đã trả lời ngày 24 tháng 8 lúc 22:58Aug 24 at 22:58
DeepakdeepakDeepak
371 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges
1