New Python Script

New Python Script
Python June 12, 2026 3 Views

import boto3
import logging
import os

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# AWS credentials
aws_access_key_id = ''
aws_secret_access_key = 'R/'

bucket_name = 'bucket'
local_directory = r"path"

# Create a session using the specified credentials
session = boto3.Session(
   aws_access_key_id=aws_access_key_id,
   aws_secret_access_key=aws_secret_access_key,
)

s3 = session.client('s3')

# Ensure local directory exists
os.makedirs(local_directory, exist_ok=True)

def list_all_objects_in_folder(bucket, prefix):
   paginator = s3.get_paginator('list_objects_v2')
   for result in paginator.paginate(Bucket=bucket, Prefix=prefix):
       for content in result.get('Contents', []):
           yield content['Key']

def download_pdf_files_from_s3(pdf_filenames):
   for pdf_filename in pdf_filenames:
       logging.info(f"Searching for {pdf_filename}")
       found = False
       
       # Iterate through each folder in the bucket
       paginator = s3.get_paginator('list_objects_v2')
       for result in paginator.paginate(Bucket=bucket_name, Delimiter='/'):
           for prefix in result.get('CommonPrefixes', []):
               try:
                   # Recursively list all objects in the current folder
                   for key in list_all_objects_in_folder(bucket_name, prefix['Prefix']):
                       if key.endswith(pdf_filename):
                           # Download the PDF file to a local directory
                           local_file_path = os.path.join(local_directory, pdf_filename)
                           s3.download_file(bucket_name, key, local_file_path)
                           logging.info(f"Downloaded {pdf_filename} from {key}")
                           found = True
                           break
                   if found:
                       break
               except Exception as e:
                   logging.error(f"Error searching for {pdf_filename} in {prefix['Prefix']}: {str(e)}")
           if found:
               break
       
       if not found:
           logging.warning(f"{pdf_filename} not found in any folder")

if __name__ == "__main__":
   try:
       with open('pdf_list.txt', 'r') as file:
           pdf_filenames = file.read().splitlines()
       download_pdf_files_from_s3(pdf_filenames)
   except Exception as e:
       logging.error(f"Error reading pdf_list.txt: {str(e)}")
 

Leave a Comment