파이썬 업무 자동화 시작: 폴더 파일 집계 코드와 검증 방법
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
파이썬 업무 자동화를 처음 연습한다면 폴더 안의 파일을 확장자별로 세고, 손으로 센 결과와 비교하는 작업부터 시작해 보세요. 입력 범위가 작아 코드가 하는 일을 확인하기 쉽고, 집계 기준과 예외 처리를 함께 연습할 수 있습니다.
이 글은 직접 만든 연습용 파일과 Python 3.12.9에서 실행한 예제를 사용합니다. 실제 회사의 문서나 업무 성과를 분석한 사례는 아닙니다. 파일 수를 정확히 셌다는 결과와 업무 시간이 얼마나 줄었는지는 별도로 확인해야 합니다.
자동화할 작업과 집계 기준 정하기
“문서를 알아서 정리한다”는 목표는 범위가 넓습니다. 여기서는 “지정한 폴더 바로 아래에 있는 일반 파일을 확장자별로 세어 화면에 표시한다”로 좁힙니다. 파일 이름 변경·이동·삭제, 문서 내용 분석, 외부 서비스 전송은 이 예제에 포함되지 않습니다.
| 항목 | 이 실습의 기준 |
|---|---|
| 입력 | 현재 작업 폴더 아래의 sample_files 폴더 |
| 포함 | sample_files 바로 아래의 일반 파일 |
| 제외 | 하위 폴더의 내부 파일, 심볼릭 링크 |
| 분류 | 마지막 확장자를 소문자로 통일. 확장자가 없으면 별도 항목 |
| 출력 | 파일 총수와 확장자별 개수. 결과 파일을 만들지 않고 화면에 표시 |
확장자만 읽는 집계이므로 파일 내용이 올바른지, 같은 내용의 중복 파일인지까지 판정하지 않습니다. 예를 들어 이름이 image.png인 파일도 실제 이미지인지 검사하지 않습니다. 먼저 작업의 완료 기준을 정해야 나중에 결과가 맞는지 대조할 수 있습니다.
연습 폴더와 예상 결과 준비하기
새 연습 공간에 sample_files라는 폴더를 만들고 아래 여섯 개 파일 이름을 준비합니다. 내용이 없는 연습 파일이어도 됩니다. 실제 고객 문서나 회사 원본을 가져올 필요는 없습니다. 운영체제에서 확장자를 숨기는 경우 파일의 실제 이름을 확인하세요.
| 직접 넣을 파일 이름 | 예상 분류 |
|---|---|
| a.txt | .txt |
| b.txt | .txt |
| report.CSV | .csv |
| notes.csv | .csv |
| image.png | .png |
| README | (확장자 없음) |
sample_files 안에 archive라는 하위 폴더를 추가하고 그 안에 nested.txt를 둡니다. 이 파일은 이번 집계에 포함하지 않습니다. 따라서 하위 폴더 안의 파일까지 합쳐7개가 보이더라도 집계 대상은 바로 아래의6개입니다. 코드 파일은 sample_files 바깥에 둡니다.
연습 공간/
file_inventory.py
sample_files/
a.txt
b.txt
report.CSV
notes.csv
image.png
README
archive/
nested.txt
실행 전에 손으로 적을 예상값은 .txt2개, .csv2개, .png1개, 확장자 없음1개입니다. 이 목록을 먼저 적으면 코드의 출력에 맞춰 정답을 바꾸는 실수를 줄일 수 있습니다.
파일 확장자를 세는 파이썬 코드
다음 코드를 UTF-8 텍스트로 file_inventory.py에 저장합니다. 이 예제는 표준 라이브러리만 사용합니다. Python 실행 명령이 설정된 환경에서 터미널의 현재 위치를 위의 “연습 공간”으로 맞춘 다음 python file_inventory.py를 실행합니다. 실행 명령 이름이나 Python 경로는 설치 환경에 따라 다를 수 있습니다.
from collections import Counter
from pathlib import Path
def count_extensions(folder):
if not folder.is_dir():
raise ValueError("연습 폴더를 찾을 수 없습니다.")
counts = Counter()
for item in folder.iterdir():
if item.is_symlink():
continue
if item.is_file():
extension = item.suffix.lower() or "(확장자 없음)"
counts[extension] += 1
return counts
if __name__ == "__main__":
target = Path("sample_files")
try:
result = count_extensions(target)
except (OSError, ValueError) as error:
raise SystemExit(f"집계 중단: {error}")
print(f"파일 수: {sum(result.values())}")
for extension, count in sorted(result.items()):
print(f"{extension}: {count}")
Path.iterdir()는 지정한 폴더의 항목을 살펴보는 데 사용하고, is_symlink()와 is_file()로 이번 실습의 포함 여부를 나눕니다. suffix는 파일 이름의 마지막 확장자이므로 archive.tar.gz라면 .gz로 분류합니다. 메서드의 동작과 접근 오류는 Python 3.12 pathlib 공식 문서에서 확인할 수 있습니다.
Counter는 분류별 개수를 담는 데 사용합니다. counts[extension] += 1에서 해당 확장자의 개수를 하나씩 늘리고, 마지막에는 정렬한 항목을 출력합니다. Python Counter 공식 문서를 함께 참고하세요.
코드의 sample_files는 스크립트 파일의 위치를 자동으로 찾는 설정이 아니라 현재 작업 위치를 기준으로 한 상대 경로입니다. 다른 폴더에서 실행해 경로 오류가 나면 먼저 터미널 위치와 폴더 이름을 확인하세요.
정상 결과와 예외 상황 검증하기
위 여섯 개 파일을 기준으로 확인한 출력은 다음과 같습니다. 대문자 .CSV가 별도 항목으로 생기지 않고 .csv에 합쳐지며, archive 안의 nested.txt는 .txt 수에 더해지지 않습니다.
파일 수: 6
(확장자 없음): 1
.csv: 2
.png: 1
.txt: 2
| 점검 상황 | 이 예제에서 확인한 결과 | 확인 의미 |
|---|---|---|
| 연습 파일6개와 하위 폴더 | 총6개, 분류별1+2+1+2=6 | 포함 범위와 분류 기준 일치 |
| 같은 입력으로 한 번 더 실행 | 동일한 출력, 연습 파일 내용 변경 없음 | 이 입력에서 반복 실행 결과 일치 |
| 존재하는 빈 sample_files | 파일 수: 0 | 정상적인 빈 결과 |
| sample_files가 없는 위치 | 집계 중단: 연습 폴더를 찾을 수 없습니다. | 경로 문제를0개 결과와 구분 |
확인 환경은 Python 3.12.9입니다. 심볼릭 링크를 건너뛰는 분기는 코드에 넣었지만 이 실습에서 링크 생성과 권한 오류를 실제 재현해 검증하지는 않았습니다. 모든 운영체제나 회사 파일 서버에서 검증됐다는 의미도 아닙니다.
집계 중 파일이 추가·삭제되면 입력 자체가 달라질 수 있습니다. 연습에서는 파일 구성을 고정한 뒤 비교하세요. try와 except는 일부 오류를 메시지로 알리는 구조이며, 잘못된 업무 기준이나 모든 오류를 자동으로 해결해 주는 장치가 아닙니다.
업무 적용과 포트폴리오 기록
다음 단계는 무조건 기능을 늘리는 것보다 실제 업무에서 어떤 결과가 필요한지 확인하는 것입니다. 확장자 개수로 충분한지, 문서별 목록이 필요한지, 하위 폴더를 포함해야 하는지부터 정합니다. 하위 폴더를 포함하도록 바꾸면 예상값과 시험 입력도 함께 바꿔야 합니다.
엑셀에서 파일 목록을 정리하는 기존 방식이 있다면 같은 범위의 목록으로 결과를 비교해 볼 수 있습니다. 조회·조건 합계 검산은 엑셀 실무 함수와 피벗 검산 예제에서, 개선 과제의 목적과 완료 조건을 정하는 방법은 프로젝트 관리 문서 구성에서 이어서 볼 수 있습니다.
시간 절감을 성과로 적으려면 같은 입력과 같은 완료 기준에서 수작업·자동화 각각에 걸린 시간을 직접 측정해야 합니다. 실행 시간뿐 아니라 입력 준비, 오류 확인, 결과 검토에 든 시간도 포함할지 미리 정하세요. 이 실습에서는 실제 업무의 절감률이나 채용 효과를 측정하지 않았습니다.
| 포트폴리오 항목 | 이 연습에서 남길 수 있는 기록 |
|---|---|
| 해결하려는 문제 | 한 폴더의 파일 확장자 분포를 같은 기준으로 집계 |
| 입력과 범위 | 가상 파일6개, 하위 폴더 제외, 내용 검사 없음 |
| 구현 | 코드와 실행 환경, 분류 기준, 오류 처리 방식 |
| 검증 | 예상 출력·실제 출력·반복 실행·빈 폴더·없는 경로 결과 |
| 한계와 다음 과제 | 미검증 환경을 표시하고 필요한 업무 조건부터 확인 |
이력서에 소개한다면 “연습용 파일 집계 도구를 작성하고 입력6개 및 빈 폴더·경로 오류를 검증했다”처럼 실제 수행 범위를 적을 수 있습니다. 하지 않은 대규모 운영이나 절감률을 더하지 마세요. 지원하려는 직무에서 이 경험이 필요한지는 해당 공고의 요구사항과 따로 연결해 설명합니다.
자주 묻는 질문
코딩이 처음인데 어떤 부분부터 이해하면 되나요?
위 예제에서는 반복문이 파일을 하나씩 살펴보고, 조건문이 포함 여부를 정하며, 함수가 집계 결과를 돌려준다는 흐름부터 확인하세요. 여섯 파일의 예상 분류를 직접 적고 코드가 처리하는 순서를 따라가면 됩니다. 학습 완료 기간은 정해진 숫자로 보장할 수 없습니다.
파일 이름을 자동으로 바꾸는 기능도 있나요?
없습니다. 이 코드는 분류와 화면 출력만 합니다. 이름 변경이나 이동 기능을 추가하려면 변경 예정 목록을 먼저 검토하고, 이름 충돌·재실행·복구 방법을 별도 설계해야 합니다.
파일이 많을수록 반드시 시간 절감 효과가 커지나요?
파일 수뿐 아니라 저장 장치, 접근 환경, 필요한 검증 작업에 영향을 받습니다. 이 글의 작은 입력으로 실제 업무의 성능이나 절감률을 추정하지 말고 동일한 업무 조건에서 측정하세요.
이 예제 하나로 자동화 관련 취업 준비가 끝나나요?
작은 연습 하나입니다. 공고에 요구된 업무 지식과 기술을 확인한 뒤, 본인이 코드를 설명하고 결과가 틀렸을 때 원인을 찾을 수 있는지 점검하세요. 포트폴리오는 직접 확인한 범위와 한계가 드러나도록 구성합니다.
먼저 여섯 개 파일의 예상값과 실제 출력을 대조해 보세요. 그다음 한 가지 조건을 바꾸고 결과가 어떻게 달라지는지 기록하는 방식으로 자동화의 범위를 넓힐 수 있습니다.
댓글
댓글 쓰기