我在包含欄位“id”的 s3 位置中有 1050 多個 json 檔案。我正在使用 get_object 遍歷這些 json 檔案以獲取這些 id。我將使用這些 id 并與一個 url 一起傳遞以獲得另一個 json 回應,其中包含一個具有快照位置的欄位,即下載檔案的鏈接。我正在捕獲下載的物件并使用 s3_client.upload_fileobj(BytesIO(response.content), bucket_name, api_download_file_path file_name) 捕獲下載的物件并寫入 s3 位置,一切都很好,但每次我在目標 s3 位置只得到 1000 個 csv 檔案,當我這樣做時我期待 1050。這是由于對 upload_fileobj 的任何限制。
完整代碼在這里
result = s3_client.list_objects(Bucket=bucket_name, Prefix=api_target_read_path)
for res in result.get('Contents'):
data = s3_client.get_object(Bucket=bucket_name, Key=res.get('Key'))
contents = data['Body'].read().decode('utf-8')
json_data = json.loads(contents)
print(json_data['id'])
json_id = json_data['id']
geturl = inv_avail_get_api_url json_id
response = requests.get(geturl, headers=headers)
print(response.text)
durl = response.json()["response"]["snapshotLocation"]
response = requests.get(durl)
segments = durl.rpartition('/')
file_name = str(segments[2]).split('?')[0]
print(file_name)
s3_client.upload_fileobj(BytesIO(response.content), bucket_name, api_download_file_path file_name)
python
uj5u.com熱心網友回復:
如果您嘗試一次獲取 1000 個以上的物件,則需要使用 paginator 類,根據檔案:
一些 AWS 操作回傳的結果不完整,需要后續請求才能獲得整個結果集。發送后續請求以繼續前一個請求停止的程序稱為分頁。例如,
list_objectsAmazon S3的操作一次最多回傳 1000 個物件,您必須使用適當的 Marker發送后續請求才能檢索下一頁結果。
s3 = boto3.client('s3')
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket='bucket', Prefix='prefix')
for page in pages:
for obj in page['Contents']:
print(obj['Size'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346551.html
標籤:蟒蛇-3.x 亚马逊网络服务 亚马逊-s3 boto3
