Es war ein Ärger von der Konsole, als ich alle Dateien aus einem bestimmten Bucket abrufen wollte Ich habe ein Tool erstellt, mit dem Dateien in einem Stapel abgerufen werden können, indem ein Bucket angegeben wird. (Vielleicht ist es schon da ...) Ich habe versucht, nicht nur die Erfassungs-, sondern auch die Löschverarbeitung hinzuzufügen. (Wenn damit etwas passiert, tun Sie dies bitte auf eigenes Risiko.)
Die Quelle selbst ist unter [hier] verfügbar (https://github.com/dmikita-sss/pythonGui/tree/master/s3). Wenn Sie das Tool starten, sieht es wie folgt aus
Dies wird mit tkinter erstellt.
Da der Bucket-Name in der Eigenschaft festgelegt ist, kann er entsprechend festgelegt werden.
Sie können auswählen, ob die Datei abgerufen oder gelöscht werden soll.
Wählen Sie für die Ordnerspezifikation aus, wo die Datei beim Abrufen gespeichert werden soll.
Der Zugriffsschlüssel und der geheime Zugriffsschlüssel werden in der Eigenschaftendatei festgelegt. Wenn Sie jedoch das Konto mit aws configure festgelegt haben, ist diese Einstellung nicht erforderlich.
Der Teil, der sich auf S3 der Quelle bezieht, ist wie folgt.
if aws_access_key_id =='':
s3 = boto3.resource('s3')
s3client=boto3.client('s3')
else:
s3 = boto3.resource('s3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key_id)
s3client=boto3.client('s3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key_id)
bucketName=self.inputFileName.get()
resultFolder=self.outputFolder.get()
dataBaseDir=os.path.join(resultFolder,bucketName)
executeType=EXECUTE_LIST.index(self.combo.get())
s3bucket=s3.Bucket(bucketName)
objs = s3bucket.meta.client.list_objects_v2(Bucket=s3bucket.name)
for o in objs.get('Contents'):
key = o.get('Key')
s3Paths=os.path.splitext(key)
if len(s3Paths[1]) !=0:
keys=key.split('/')
filename=keys[len(keys)-1]
if executeType==0:
outputDataDir=key.split(filename)[0]
outputDataDir=os.path.join(dataBaseDir,outputDataDir)
os.makedirs(outputDataDir,exist_ok=True)
outputDataFile=os.path.join(outputDataDir,filename)
s3bucket.download_file(key,outputDataFile)
else:
s3client.delete_object(Bucket=s3bucket.name, Key=key)
objs = s3bucket.meta.client.list_objects_v2(Bucket=s3bucket.name)
Da es in dem Teil von erhalten werden kann, wird es von der for-Anweisung verarbeitet. Es ist auch möglich, nur bestimmte Ordner und Dateien anzugeben, indem dem Argument "Präfix" hinzugefügt wird.
Recommended Posts