Search code examples
pythonazureazure-storageazure-blob-storage

Problem on upload a file from a azure storage container to another container after processing


The scenario is: I have a CSV file in Azure storage. I wanna process a column of this file (for example, separate and create a new file every minute of record receiving), and then new files store on another azure storage container.

In the below code I read a file and process it and create separate files but when I want to upload I received this error: [Errno 2] No such file or directory: My code is:

import os, uuid
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
import pandas as pd

try:
    print("Azure Blob Storage v" + __version__ + " - Python quickstart sample")

    accountName = "***"
    accountKey = "*****"
    containerName = "sourcedata"
    blobName = "testdataset.csv"
    urlblob = "https://***.blob.core.windows.net/sorcedata/testdataset.csv"
    connect_str = "******"

    blobService = BlobServiceClient(account_name=accountName, account_key=accountKey, account_url=urlblob)


    # Create the BlobServiceClient object which will be used to create a container client
    blob_service_client = BlobServiceClient.from_connection_string(connect_str)

    # Create a unique name for the container
    container_name = str(uuid.uuid4())

    # Create the container
    container_client = blob_service_client.create_container(container_name)

    df = pd.read_csv(urlblob)

    # create datetime column
    df['datetime'] = pd.to_datetime(df.received_time, format='%M:%S.%f')

    # groupby with Grouper, and save to csv
    for g, d in df.groupby(pd.Grouper(key='datetime', freq='1min')):
        # Create file name
        filename = str(g.time()).replace(':', '')
        # remove datetime column and save CSV file 
        d.iloc[:, :-1].to_csv(f'{filename}.csv', index=False)
        # Create a blob client using the local file name as the name for the blob
        blob_client = blob_service_client.get_blob_client(container=container_name, blob=filename)
        print("\nUploading to Azure Storage as blob:\n\t" + filename)
        # Upload the created file
        with open(filename, "rb") as data:
            blob_client.upload_blob(data)

  

except Exception as ex:
    print('Exception:')
    print(ex)

Solution

  • You should write your code like this:

    with open(filename + ".csv", "rb") as data:
    

    filename is just your file name without a suffix. It is incomplete, so when python opens this file, it cannot find the file.

    enter image description here

    Result image:

    enter image description here

    enter image description here