我已經從 S3 下載了一個檔案,并將 S3 回應物件傳遞給其他函式。
我認為密鑰/檔案名必須存盤在此物件本身的某個位置,但我似乎找不到它。我不想將檔案名傳遞給每個需要它的函式。
我所有的谷歌搜索只是展示了如何在不下載的情況下從存盤桶中獲取檔案的名稱,而不是如何從回應中獲取檔案名。
我正在使用 Python/Boto3:
def main():
file = s3.Object("my cool bucket", "my cool file").get()
process_file(file)
def process_file(file):
print(file.name)
# how do I make this work w/o passing in filename as arg to original function
uj5u.com熱心網友回復:
回應的get_object(...)并沒有回傳回應物件的鍵(“檔案名”)。
它回傳以下屬性,其中沒有一個是關鍵。
不幸的是,您必須首先將用于獲取物件的密鑰/檔案名傳遞給需要它的任何其他函式。
{
'Body': StreamingBody(),
'DeleteMarker': True|False,
'AcceptRanges': 'string',
'Expiration': 'string',
'Restore': 'string',
'LastModified': datetime(2015, 1, 1),
'ContentLength': 123,
'ETag': 'string',
'MissingMeta': 123,
'VersionId': 'string',
'CacheControl': 'string',
'ContentDisposition': 'string',
'ContentEncoding': 'string',
'ContentLanguage': 'string',
'ContentRange': 'string',
'ContentType': 'string',
'Expires': datetime(2015, 1, 1),
'WebsiteRedirectLocation': 'string',
'ServerSideEncryption': 'AES256'|'aws:kms',
'Metadata': {
'string': 'string'
},
'SSECustomerAlgorithm': 'string',
'SSECustomerKeyMD5': 'string',
'SSEKMSKeyId': 'string',
'BucketKeyEnabled': True|False,
'StorageClass': 'STANDARD'|'REDUCED_REDUNDANCY'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'GLACIER'|'DEEP_ARCHIVE'|'OUTPOSTS',
'RequestCharged': 'requester',
'ReplicationStatus': 'COMPLETE'|'PENDING'|'FAILED'|'REPLICA',
'PartsCount': 123,
'TagCount': 123,
'ObjectLockMode': 'GOVERNANCE'|'COMPLIANCE',
'ObjectLockRetainUntilDate': datetime(2015, 1, 1),
'ObjectLockLegalHoldStatus': 'ON'|'OFF'
}
uj5u.com熱心網友回復:
您可以使用以下代碼分別獲取路徑和檔案名:
bkt_obj = conn_s3.Bucket(bkt_name)
for obj in bkt_obj.objects.all():
if obj.key[-1] != '/' and obj.key[-1] != '$':
file = obj.key
path, filename = os.path.split(obj.key)
filename = os.path.basename(file)
print(f"FILE: {obj.key} -> {path} -> {filename}")
輸出:
FILE: dir1/dir1_file.txt -> dir1 -> dir1_file.txt
FILE: mydatafile.csv -> -> mydatafile.csv
您可以在要獲取下載檔案的確切路徑的上述代碼之后添加此代碼:
path_local_files='/home/user/s3_data/'
dest_file = os.path.join(path_local_files, filename)
print(f" --------> {dest_file}") #use this variable if need of full path
#bkt_obj.download_file(obj.key, dest_file) #download file
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318851.html
