Создать CSV-файл в облачном хранилище с помощью облачных функций - PullRequest
1 голос
/ 09 мая 2019

Я пытался создать CSV-файл из строки в облачных функциях.Он временно хранит файл в папке / tmp.Затем файл отправляется в корзину.

Ниже приведен мой код -

def upload_blob(bucket_name, source_file_name, destination_blob_name):

    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_file(source_file_name)

message = "Data for CSV file"
csv = open('test.csv', "w")    #ERROR HERE
csv.write(message)
with open('/tmp/test.csv', 'r') as file_obj:
    upload_blob('test-bucket', file_obj, 'test.csv')

Я получаю следующую ошибку -

File "/user_code/main.py", line 30, in hello_main csv = open('test.csv', 
"w") OSError: [Errno 30] Read-only file system: 'test.csv'

Как сделать этот файл доступным для записи

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Попробуйте заменить:

csv = open('test.csv', "w") 

с:

csv = open('/tmp/test.csv', "w") 

, поскольку у вас есть права на запись только в / tmp

0 голосов
/ 13 мая 2019

Как сказал @ saccodd , проблема в том, что у вас есть только права на запись в каталог /tmp . Итак, замена:

csv = open('test.csv', "w") 

с:

csv = open('/tmp/test.csv', "w") 

устранит ошибку, но рекомендуется закрыть файл перед повторной обработкой. Цитирование официальной документации Python :

Рекомендуется использовать ключевое слово с при работе с файлом. объекты. Преимущество заключается в том, что файл правильно закрыт после его Набор заканчивается, даже если в какой-то момент возникает исключение. С помощью с также намного короче, чем написание эквивалента try-finally блоков

Так что лучше заменить

csv = open('test.csv', "w") #ERROR HERE 
csv.write(message) 

с:

with open('/tmp/test.csv', "w") as csv: 
    csv.write(message) 
...