Ich habe angefangen, S3 bei der Arbeit zu benutzen.
Der S3-Schlüssel wird in der Datenbank gespeichert und ist normalerweise in Ordnung, aber es ist problematisch, wenn er irgendwohin verschoben wird.
Also habe ich boto verwendet, um eine Liste der S3-Schlüssel zu erhalten.
Ich denke, es ist effizient, weil es scheint, dass nur HEAD geworfen wird.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Geben Sie die Liste der im Ziel-Bucket enthaltenen Dateien an TSV aus.
"""
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):
"""
Gibt den folgenden Schlüssel von aws cli config zurück
- 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):
"""
Gibt den Boto S3-Bucket zurück
"""
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):
"""
S3 Bucket Key.Namenslistendatei_Export zum Namen als TSV.
"""
#Bestimmen des absoluten Dateipfads
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)
#Header exportieren
_writerows([('key_name', )])
#Körper exportieren
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 ** Die Firma, zu der ich gehöre, scheint [Rekrutierung von Mitarbeitern] zu sein (http://jobs.beproud.jp/). Wenn Sie der Meinung sind, dass Sie versuchen sollten, Python zu schreiben, bewerben Sie sich bitte.