직장인

[회사원] 업무 코딩기록 - (pdfplumber, pandas) pdf에서 표추출(.xlsx)

cyy1211 2024. 12. 20. 15:28
728x90
반응형
import pdfplumber
import pandas as pd
import os

# 입력 및 출력 폴더 설정
input_folder = r"C:\Users\user\Desktop\VSCode(python)\(CODE)PDF,OCR\pdf_raw"
output_folder = r"C:\Users\user\Desktop\VSCode(python)\(CODE)PDF,OCR\pdf_result"

# 출력 폴더가 존재하지 않으면 생성
os.makedirs(output_folder, exist_ok=True)

# 입력 폴더의 모든 PDF 파일 처리
for filename in os.listdir(input_folder):
    if filename.endswith(".pdf"):
        pdf_path = os.path.join(input_folder, filename)
        output_file = os.path.join(output_folder, "output.xlsx")

        # PDF 파일 열기
        with pdfplumber.open(pdf_path) as pdf:
            # 첫 번째 페이지 불러오기
            page = pdf.pages[0]

            # 페이지에서 테이블 추출
            tables = page.extract_tables()

            # 테이블이 존재하는지 확인
            if tables:
                print(f"{len(tables)} table(s) found on page {filename}.")
               
                # 여러 개의 테이블이 있을 경우를 대비하여
                with pd.ExcelWriter(output_file, engine='xlsxwriter') as writer:
                    # 추출된 테이블 각각에 대해 처리
                    for idx, table in enumerate(tables):
                        # 테이블을 pandas 데이터프레임으로 변환
                        df = pd.DataFrame(table[1:], columns=table[0])  # 첫 번째 행을 헤더로 지정
                        print(f"\nTable {idx + 1}:")
                        print(df)

                        # 엑셀에 테이블 저장
                        sheet_name = f"Table_{idx + 1}"  # 각 테이블을 개별 시트로 저장
                        df.to_excel(writer, sheet_name=sheet_name, index=False)

                print(f"Tables have been saved to '{output_file}' for {filename}.")
            else:
                print(f"No tables found on page {filename}.")
728x90
반응형