Я хочу загрузить свой локальный CSV-файл в мое хранилище AWS S3
Я пытался:
s3 = boto3.resource('s3')
s3.meta.client.upload_file('verified_path_of_my_CSV', 'bucket_name', 'My_csv')
, но я получаю 0-байтовый CSV в моем ведре
Iтакже попробуйте:
s3_client = boto3.resource('s3')
bucket = s3.Bucket('bucket_name')
s3.Object(bucket, 'My_csv').put(Body=open(csv_path, 'rb'))
но я получаю эту ошибку:
Traceback (most recent call last):
File "test-text.py", line 109, in <module>
main()
File "test-text.py", line 88, in main
upload_csv(bucket, 'name_of_my_csv', 'My_path')
File "test-text.py", line 56, in upload_csv
s3.Object(bucket, 'My_csv').put(Body=open(csv_path, 'rb'))
...
File "/home/toto/.local/lib/python3.7/site-packages/botocore/handlers.py", line 219, in validate_bucket_name
if VALID_BUCKET.search(bucket) is None:
TypeError: expected string or bytes-like object
Как я могу сделать для загрузки моего CSV в S3?
Заранее спасибо
Решено:
На самом деле, когда я сделал свой CSV, я пишу это:
with open('job_file.csv', 'w') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',')
text = process_text_analysis(bucket, file, True)
filewriter.writerow(["doc1", text])
upload_csv(bucket, key_s3, 'my_local_csv_path')
Но я исполняю upload_csv()
до того, как закончил мой CSVправильный путь - переместить мою функцию загрузки из блока:
with open('job_file.csv', 'w') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',')
text = process_text_analysis(bucket, file, True)
filewriter.writerow(["doc1", text])
upload_csv(bucket, key_s3, 'my_local_csv_path')
глупая ошибка, которую я знаю :), но это добавление ...
Надеюсь, что это редактирование может избежать этого типавопрос в будущем;)
Спасибо всем вам за попытку решить мою проблему