C'était un problème de la part de la console lorsque je voulais obtenir tous les fichiers d'un compartiment particulier, alors J'ai créé un outil qui peut obtenir des fichiers dans un lot en spécifiant un seau. (Peut-être que c'est déjà là ...) J'ai essayé d'ajouter non seulement l'acquisition mais aussi le traitement de suppression. (Si quelque chose se produit en utilisant ceci, veuillez le faire à vos propres risques.)
La source elle-même est disponible sur ici. Lorsque vous démarrez l'outil, ce sera comme suit
Ceci est créé en utilisant tkinter.
Le nom du compartiment étant défini dans la propriété, il peut être défini de manière appropriée.
Vous pouvez choisir d'obtenir ou de supprimer le fichier.
Pour la spécification du dossier, sélectionnez où stocker le fichier lors de sa récupération.
La clé d'accès et la clé d'accès secrète sont définies dans le fichier de propriétés, mais si vous avez défini le compte avec aws configure, ce paramètre n'est pas nécessaire.
La partie relative à S3 de la source est la suivante.
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)
Puisqu'il peut être obtenu dans la partie de, il est traité par l'instruction for.
Il est également possible de spécifier uniquement des dossiers et des fichiers spécifiques en ajoutant Prefix
à l'argument.
pythonGui.py
, ce sera comme suit.
Recommended Posts