J'ai commencé à utiliser S3 au travail.
La clé S3 est stockée dans la base de données et convient généralement, mais elle est gênante si elle se déplace quelque part.
J'ai donc utilisé boto pour obtenir une liste de clés S3.
Je pense que c'est efficace car il semble que seule HEAD soit lancée.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Exportez la liste des fichiers contenus dans le compartiment cible vers TSV.
"""
import sys
import os
import csv
from ConfigParser import SafeConfigParser
from getpass import getpass
from boto import connect_s3
AWS_CLI_CONFIG_PATH = os.path.expanduser('~/.aws/config')
def get_aws_config(config_path=AWS_CLI_CONFIG_PATH):
"""
Renvoie la clé suivante de aws cli config
- aws_access_key_id
- aws_secret_access_key'
"""
keys = ['aws_access_key_id', 'aws_secret_access_key']
cfg = SafeConfigParser()
with open(config_path, 'r') as fp:
cfg.readfp(fp)
return tuple(cfg.get('default', x) for x in keys)
def get_bucket(aws_access_key_id, aws_secret_access_key, bucket_name):
"""
renvoie le compartiment boto S3
"""
if not aws_access_key_id and not aws_secret_access_key:
aws_access_key_id, aws_secret_access_key = get_aws_config()
return connect_s3(aws_access_key_id, aws_secret_access_key).get_bucket(bucket_name)
def write_tsv(aws_access_key_id, aws_secret_access_key, bucket_name, file_name):
"""
Clé de compartiment S3.fichier de liste de noms_Exporter sous le nom TSV.
"""
#Déterminer le chemin absolu du fichier
file_path = os.path.abspath(file_name)
def _writerows(rows):
with open(file_path, 'a') as fp:
writer = csv.writer(fp, dialect='excel-tab')
writer.writerows(rows)
#Exporter l'en-tête
_writerows([('key_name', )])
#Corps d'exportation
rows = []
for key in get_bucket(aws_access_key_id, aws_secret_access_key, bucket_name).list():
rows.append(key.name)
if len(rows) > 1000:
_writerows(rows)
rows = []
else:
_writerows(rows)
if __name__ == '__main__':
if len(sys.argv) != 2:
print('Please specify output filename.')
else:
print('Please input the aws_access_key_id/aws_secret_access_key and a target bucket name.')
print('If you don\'t input the aws_access_key_id/aws_secret_access_key, then we use awscli config.')
aws_access_key_id = getpass('aws_access_key_id: ')
aws_secret_access_key = getpass('aws_secret_access_key: ')
bucket_name = raw_input('target bucket name: ')
if not aws_access_key_id and not aws_secret_access_key and not os.path.isfile(AWS_CLI_CONFIG_PATH):
print('Please specify the aws_access_key_id/aws_secret_access_key or create awscli config.')
sys.exit(1)
write_tsv(
aws_access_key_id,
aws_secret_access_key,
bucket_name,
sys.argv[1])
print('Output: {}'.format(sys.argv[1]))
** Sutema ** La société à laquelle j'appartiens semble être qui recrute des employés. Si vous pensez que vous devriez essayer d'écrire Python, veuillez postuler.
Recommended Posts