직장인
[회사원] 업무 코딩기록 - (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
반응형