커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
파이썬 폴더링 응용
[왕초보] 칼퇴를 부르는 파이썬 업무 자동화
2주차
북마크
김*랑
댓글
5
추천
0
조회수
11
조회수
11
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.



안녕하세요 업무 자동화 강의를 응용하기 위해 아래와 같은 문제를 풀고 있습니다.

# 지정된 폴더('포트폴리오' 폴더로 icloud drive에 저장되어 있음.)에서 pdf 파일 읽기 

# pdf 내용 분석 

# 핵심 키워드 추출

# 파일 이름 변경 ({핵심키워드}_{1})




1) 콘솔에 출력된 에러는 없으며 실행시, 정상적으로 '파일 이름 변경 및 이동이 완료되었습니다' 가 첨부됩니다.

2) 다만 문제는 정상 동작은 destination folder 생성 이후(line 7), 파일 이름이 변경되어야하는데, 이게 이뤄지지 않습니다.

new_name = f'{project_type}_{order_number}.pdf' (line 63)


작성된 코드 몇번째 줄이 문제인 것인지 예상가거나, 디버깅을 위한 출력할텐데 어느 단계인지 알려주시면 감사하겠습니다. 또한 디버깅을 할 코드는 어떻게 작성하면 좋을까요? e.g( print(f"처리 중인 파일: {filename}") )


스파르타 즉문즉답




작성한 코드 및 에러 메세지

오류 발생 시, 작성한 코드 전체와 에러 메시지를

import os

import shutil

from PyPDF2 import PdfReader


# 설정

source_folder = '/Users/admin/Library/Mobile Documents/com~apple~CloudDocs/2024 이력서 모음/포트폴리오' # PDF 파일이 있는 폴더

destination_folder = './폴더링 테스트' # 변경된 파일을 저장할 폴더


# 폴더 생성

os.makedirs(destination_folder, exist_ok=True)


# project structure 를 정의하고, 'key'(프로젝트 유형) & "value"(목차 항목 리스트)를 정의한다.

project_structure = {

'스토리 프로젝트': [

"프로젝트 배경",

"as-is & to-be",

"팀 외부 커뮤니케이션",

"어드민 & 시스템 설계시 고려사항"

],

'제휴 파트너사 프로젝트': [

"제휴 파트너사 어드민",

"프로젝트 배경",

"전략 및 해결 방안"

]

}


# 끝에 pdf를 가지고 있는 파일들만 source_folder, filename 과 결합하여 새로운 경로를 생성한다. 이후 filename 변수에 저장하여 파일을 꺼낸다.

for filename in os.listdir(source_folder):

if filename.endswith('.pdf'):

file_path = os.path.join(source_folder, filename)

# PDF 파일 열기

reader = PdfReader(file_path)

text = ''

# text 변수를 초기화한다.


for page in reader.pages:

text += page.extract_text() + ''

# 페이지의 문자를 추출하여, text 변수에 누적한다.


# 프로젝트 유형에 어디에 속하는지 검증하기 위해 초기화

project_type = None

# project_structure 각 프로젝트 유형에 대해 반복한다.

for key in project_structure:

# 각 유형의 목차 항목 중 하나라도 pdf 내용(text)에 포함되어 있다면, project_type 에 key 변수를 저장하고 반복을 중단한다.

if any(item in text for item in project_structure[key]):

project_type = key

break


# project_type 이 none이 아닌 경우, 아래 코드 실행

if project_type:

# order number를 1로 초기화한다.

order_number = 1

# 현재 프로젝트 유형에 상응하는 목차 항목 리스트를 반복한다.

for section in project_structure[project_type]:

# section이 text에 포함되어 있는지 확인 후 반복

if section in text:

# {프로젝트 유형}_{순서 번호}.pdf로 new_name 생성

new_name = f'{project_type}_{order_number}.pdf' # 예: 스토리 프로젝트_1.pdf

# destination_folder, new_name

new_file_path = os.path.join(destination_folder, new_name)


# 원본 pdf 파일 -> 새로운 경로로 이동

shutil.move(file_path, new_file_path)

order_number += 1 # 순서 증가 다음 목차에 적용


print("파일 이름 변경 및 이동이 완료되었습니다.")

첨부해 주세요.

Tip 1) </> 아이콘을 눌러 코드박스를 만들어 보세요.

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴