чтение CSV из хранилища BLOB-объектов с функцией Azure без разрешений - PullRequest
0 голосов
/ 28 октября 2019

Я хотел бы прочитать CSV-файл из хранилища BLOB-объектов Azure с помощью функции Python Azure. Используя приведенный ниже код, я получаю сообщение об ошибке:

[Errno 30] Файловая система только для чтения: '/ home / site / wwwroot / my_csv_file'

Ифрагмент кода:

work_directory= os.getcwd()
filename = my_csv_file
account_name = <blob_storage>
account_key = <blob_key>

os.chmod(work_directory, 0o777)

input_fpath=os.path.join(work_directory, filename)
block_blob_service = BlockBlobService(account_name, account_key)
block_blob_service.get_blob_to_path(container_name=<input_container_name>, blob_name=filename,
                                          file_path=input_fpath)

Как я могу изменить разрешения или как я могу читать csv в python другим способом?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

решено с использованием get_blob_to_text вместо get_blob_to_path:

blobstring = block_blob_service.get_blob_to_text(<input_container_name>, file_name).content

Решение найдено здесь .

chmodне требуется. Итак, весь код выглядит следующим образом:

filename = my_csv_file
account_name = <blob_storage>
account_key = <blob_key>

block_blob_service = BlockBlobService(account_name, account_key)
blobstring = block_blob_service.get_blob_to_text(<input_container_name>, filename).content
0 голосов
/ 29 октября 2019

На данный момент функция Python Azure не позволяет записывать файл, это режим только для чтения, который не может быть изменен. Таким образом, вы не можете ни использовать chmod метод, ни использовать get_blob_to_path, потому что вы можете записать файл на свой диск.

Поэтому, возможно, вы можете прочитать ваш файл в поток, а затем отправить его в ответ. Вы можете сослаться на мой код, я использую привязку BLOB-объекта для чтения текстового файла.

def main(req: func.HttpRequest,inputblob: func.InputStream) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

name = req.params.get('name')
if not name:
    try:
        req_body = req.get_json()
    except ValueError:
        pass
    else:
        name = req_body.get('name')

if name:
    return func.HttpResponse(inputblob.read(size=-1))
else:
    return func.HttpResponse(
         "Please pass a name on the query string or in the request body",
         status_code=400
    )

enter image description here

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