AWS S3 PDF List Export
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)}")
3 Comments
Thanks I will update is soon