Pdf-List-Exact-Folder
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