![](/img/trans.png)
[英]Is there a way to merge multiple CSV files uploaded to AWS S3 bucket using Python?
[英]error sending multiple files to aws s3 using python
我正在學習使用Raspberry Pi和python的AWS IoT。 我遇到的問題如下:
在事件檢測的主要功能中,已拍攝照片並將其保存在Pi上。 圖片保存后,將調用函數store_to_bucket,並且我傳遞了兩個參數:存儲圖片的路徑和日期字符串。 一切工作一切正常。 第二個函數調用給我以下錯誤:
ClientError:調用PutObject操作時發生錯誤(AuthorizationHeaderMalformed):授權標頭格式錯誤; 憑據中必須提供非空訪問密鑰(AKID)。
碼
ACCESS_KEY_ID = open("/mykey/path/key.txt", "r")
ACCESS_SECRET_KEY = open("/mykey/path/skey.txt", "r")
BUCKET_NAME = open("/mykey/path/bucket.txt", "r").read()
data = open(path, 'rb')
ext = '.jpg'
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID.read(),
aws_secret_access_key=ACCESS_SECRET_KEY.read(),
config=Config(signature_version='s3v4')
)
def store_to_bucket(path, date):
s3.Bucket(BUCKET_NAME).put_object(Key=date+ext, Body=data)
print ("Done")
不確定憑證的問題是什么? 是否有人遇到過類似問題或知道如何解決?
通過修復一些代碼找到了解決我的問題的方法。 以下是更新版本:
import boto3
from botocore.client import Config
ACCESS_KEY_ID = open("/home/pi/Desktop/pythonForAWS/certs/key.txt",
"r").read()
ACCESS_SECRET_KEY = open("/home/pi/Desktop/pythonForAWS/certs/skey.txt",
"r").read()
BUCKET_NAME = open("/home/pi/Desktop/pythonForAWS/certs/bucket.txt",
"r").read()
def store_to_bucket(path, date):
data = open(path, 'rb')
ext = '.jpg'
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
s3.Bucket(BUCKET_NAME).put_object(Key=date+ext, Body=data)
print ("Done")
通過重寫可以理解,如果您正在函數內部創建s3
對象,則無法正常工作的原因可能是因為您在同一文件對象上多次調用read()
。
第一次調用返回文件的全部內容,但是將文件對象的“位置”移到末尾,因此同一函數的后續調用不返回任何內容-因為沒有更多要讀取的內容。
只讀取一次值就可以了,就像seek()
返回文件的開頭並每次都重新讀取一樣。 我建議只讀取一次該值,以避免不必要的I / O和相關的開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.