Как отредактировать файл * .csv в хранилище BLOB-объектов azure с помощью функции azure? - PullRequest
1 голос
/ 09 июля 2020

Я работаю с Azure в данный момент, и я недоволен предопределенными функциями в DataFactory, потому что они запускают кластер в фоновом режиме, и это абсолютно не обязательно для моей проблемы. Я получаю CSV-файл в заранее определенной папке и хочу выбрать набор столбцов и сохранить их в определенном порядке в CSV-файле. На данный момент мой файл выглядит следующим образом:

Файл JSON:

  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "path": "input-raw",
      "connection": "AzureWebJobsStorage",
      "direction": "in"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "path": "{blobTrigger}-copy",  
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    }
  ],
  "disabled": false,
  "scriptFile": "__init__.py"
}

init .py:

import logging
import azure.functions as func

def main(myblob: func.InputStream, outputblob: func.Out[func.InputStream]):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
    outputblob.set(myblob)

Моя функция выбирает файл в папке и копирует его с «копией» в конце в ту же папку. Есть ли простой способ получить доступ к данным и отредактировать их с помощью python?

Теперь я попробовал пакеты 'csv', 'io' и 'fileinput', чтобы прочитать информацию, но я не смог до сих пор, чтобы редактировать или даже просматривать данные в моем VisualStudioCode.

Если вам нужна дополнительная информация, дайте мне знать.

Best P

1 Ответ

1 голос
/ 10 июля 2020

На самом деле нет возможности «редактировать» файл .csv. Но вы можете загрузить файл .csv и изменить его, а затем загрузить, чтобы заменить файл .csv на azure.

Кстати, если я правильно прочитал, у вашей функции есть большая проблема. Когда срабатывает функция azure, в вашем контейнере будет бесконечный файл xx-Copy. Я имею в виду, что выходной файл будет условием триггера вашей функции, а функция будет бесконечной.

Это моя функция, она использует InputStream для развлечения c для чтения данных blob:

import logging

import azure.functions as func


def main(myblob: func.InputStream):
    
    logging.info(myblob.read().decode("utf-8") );
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes")
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

В моей ситуации я сначала считываю данные большого двоичного объекта в байты, а затем конвертирую их в строку. Дайте мне знать, поможет ли это решить ваш вопрос .:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...