AWS S3 PDF List Export

AWS S3 PDF List Export
AWS December 11, 2025 26 Views

import boto3
import logging
import os
import pandas as pd

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

# AWS credentials
aws_access_key_id = 'Key'
aws_secret_access_key = 'Sec Key'
bucket_name = 'Bucket name'
base_prefix = 'Folder Name/'

# Create an 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 list_folders(bucket, prefix):
   """List all subfolders (prefixes) under the given prefix."""
   folders = []
   paginator = s3.get_paginator('list_objects_v2')
   for result in paginator.paginate(Bucket=bucket, Prefix=prefix, Delimiter='/'):
       folders.extend([prefix_obj['Prefix'] for prefix_obj in result.get('CommonPrefixes', [])])
   return folders

def list_pdfs_in_folder(bucket, folder):
   """List all PDF files in a given folder."""
   pdf_files = []
   paginator = s3.get_paginator('list_objects_v2')
   for result in paginator.paginate(Bucket=bucket, Prefix=folder):
       for obj in result.get('Contents', []):
           if obj['Key'].endswith('.pdf'):
               pdf_files.append(os.path.basename(obj['Key']))
   return pdf_files

def generate_excel_report(bucket, prefix):
   """Generate an Excel report of folders and their corresponding PDF files."""
   data = []

   folders = list_folders(bucket, prefix)
   for folder in folders:
       pdf_files = list_pdfs_in_folder(bucket, folder)
       if pdf_files:
           for pdf in pdf_files:
               folder_name = folder.replace(prefix, '').strip('/')
               data.append([folder_name, pdf])

   # Create a DataFrame
   df = pd.DataFrame(data, columns=['Folder Name', 'PDF File Name'])

   # Save to an Excel file
   excel_file = "s3_pdf_report.xlsx"
   df.to_excel(excel_file, index=False, engine='openpyxl')

   logging.info(f"Excel report generated successfully: {excel_file}")
   print(f"Excel report generated: {excel_file}")

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

Leave a Comment

3 Comments

A
Arijit Auddy 7 months ago
Welcome
🛡 Admin

Thanks I will update is soon

H
Honny Singh 7 months ago
lkh/ojqw
S
Sandeep 7 months ago
Hello