AWS相关函数

文件排序

1
2
3
4
5
6
7
8
9
10
11
def list_s3_by_prefix(bucket, prefix, filter_func=None):
print(f"list_s3_by_prefix bucket: {bucket}, prefix: {prefix}")
s3_bucket = boto3.resource('s3').Bucket(bucket)
if filter_func is None:
key_list = [s.key for s in s3_bucket.objects.filter(Prefix=prefix)]
else:
key_list = [s.key for s in s3_bucket.objects.filter(
Prefix=prefix) if filter_func(s.key)]

print("list_s3_by_prefix return:", key_list)
return key_list

文件拷贝到s3

1
2
3
4
5
6
7
8
def s3_copy(bucket, from_key, to_key):
s3_bucket = boto3.resource('s3').Bucket(bucket)
copy_source = {
'Bucket': bucket,
'Key': from_key
}
s3_bucket.copy(copy_source, to_key)
print("copied s3://{}/{} to s3://{}/{}".format(bucket, from_key, bucket, to_key))

文件同步到本地

1
2
3
4
5
6
def sync_s3(file_name_list, s3_folder, local_folder):
for f in file_name_list:
print("file preparation: download src key {} to dst key {}".format(os.path.join(
s3_folder, f), os.path.join(local_folder, f)))
s3client.download_file(bucket, os.path.join(
s3_folder, f), os.path.join(local_folder, f))

上传单个文件

1
2
3
4
5
6
7
8
9
def write_to_s3(filename, bucket, key):
print("upload s3://{}/{}".format(bucket, key))
with open(filename, 'rb') as f: # Read in binary mode
# return s3client.upload_fileobj(f, bucket, key)
return s3client.put_object(
ACL='bucket-owner-full-control',
Bucket=bucket,
Key=key,
Body=f