Pdf-List-Exact-Folder

Pdf-List-Exact-Folder
Python June 15, 2026 3 Views

import boto3
import logging
import os
import pandas as pd

# ---------------- CONFIGURATION ---------------- #
aws_access_key_id = ''
aws_secret_access_key = ''

bucket_name = 'bucket'
base_prefix = 'folder/'
output_file = 's3_pdf_report_jan26.xlsx'
# ------------------------------------------------ #

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

# Create S3 session
session = boto3.Session(
   aws_access_key_id=aws_access_key_id,
   aws_secret_access_key=aws_secret_access_key,
)
s3 = session.client('s3')


def generate_excel_report(bucket, prefix):
   """Scan all objects under prefix and find PDFs."""
   data = []
   paginator = s3.get_paginator('list_objects_v2')

   logging.info(f"Scanning bucket '{bucket}' under prefix '{prefix}'")

   for result in paginator.paginate(Bucket=bucket, Prefix=prefix):
       for obj in result.get('Contents', []):
           key = obj['Key']
           if key.endswith('.pdf'):
               folder_name = os.path.dirname(key).replace(prefix, '').strip('/')
               pdf_name = os.path.basename(key)
               full_path = f's3://{bucket}/{key}'
               data.append([folder_name, pdf_name, full_path])

   if not data:
       logging.info("No PDF files found.")
       return

   df = pd.DataFrame(data, columns=['Folder Name', 'PDF File Name', 'Full S3 Path'])
   df.to_excel(output_file, index=False, engine='openpyxl')
   logging.info(f"Excel report generated: {output_file}")
   print(f"Excel report saved: {output_file}")


if __name__ == "__main__":
   try:
       generate_excel_report(bucket_name, base_prefix)
   except Exception as e:
       logging.error(f"Failed to generate report: {str(e)}")
 

Leave a Comment