본문 바로가기
실전 개발 노트/자동화·실험

여러 CSV를 중복 없이 주간 보고서로 합치기: Python 직접 실험

by 쑥쑥자라나라 2026. 8. 1.
728x90

2026. 8. 1 (토) · 약 10분

월요일과 화요일에 받은 업무 CSV를 합치면 같은 일이 두 번 들어갈 수 있다. 이번에는 개인정보 없는 네 행의 테스트 CSV를 실제로 합쳤다. 중복 기준을 날짜·팀·업무로 정하고, 한 행을 제외한 뒤 팀별 시간을 보고서로 저장했다. 기대한 결과는 세 행 보관과 팀별 60분·45분 합계였다. 실제 출력도 그 값과 같았다.

두 업무 CSV에서 중복 행을 찾아 주간 보고서를 저장하는 대표 일러스트

업무자동화 실험

실행 기록 · Python csv 공식 문서 · 2026. 8. 1

두 CSV를 중복 없이 합친 Python csv 실험

개인정보 없는 테스트 CSV 네 행에서 한 중복을 제외하고 팀별 시간을 새 보고서로 저장했다.

같은 일이 두 번 계산되는 순간

파일을 한 폴더에 모으는 것만으로 보고서가 되지는 않는다. 이 실험에서는 날짜·팀·업무가 모두 같은 행을 중복으로 정했다. 실제 입력은 monday.csv 2행과 tuesday.csv 2행, 모두 가상 업무 문구였다.

격리한 입력과 기대 결과

macOS의 임시 폴더에서 Python 3.9.6 표준 라이브러리만 사용했다. 기대 결과는 입력 4행, 보관 3행, 중복 1행이며 운영 60분과 콘텐츠 45분이다. 계정, API 키, 실제 업무 파일은 사용하지 않았다.

key = (row['date'], row['team'], row['task'])
if key not in seen:
    seen.add(key)
    clean.append(row)
두 테스트 CSV에서 네 행을 읽은 실제 Playwright 캡처
실제 실행 전 결과 화면. 두 테스트 파일에서 네 행을 읽은 상태를 Playwright로 캡처했다.

중복 기준을 코드에 넣기

행 전체를 비교하면 사소한 메모 차이에도 같은 업무를 놓칠 수 있다. 반대로 팀 이름만 보면 서로 다른 일을 지울 수 있다. 이번에는 날짜·팀·업무 세 열을 묶어 키로 삼았다.

중복 판단은 기술 문제가 아니라 업무 약속이기도 하다. 같은 날짜에 같은 팀이 같은 점검을 두 번 했다면 이번 규칙은 한 행을 지우므로 실제 업무를 과소 집계할 수 있다. 반대로 담당자와 취합 담당자가 같은 일을 각각 보냈다면 두 행을 남기면 시간이 두 배가 된다. 그래서 자동화를 실행하기 전에는 날짜·팀·업무가 같으면 한 번으로 본다는 가정을 작은 표본에서 먼저 확인했다. 실제 조직에서는 담당자, 시간, 작업 번호처럼 더 구체적인 열을 키에 넣어야 할 수도 있다.

입력 정리도 결과만큼 중요하다. CSV는 단순해 보이지만 헤더 이름이 달라지거나 빈 줄이 섞이면 코드가 기대한 값을 찾지 못한다. 이번 테스트 파일은 date, team, task, minutes라는 같은 헤더를 썼고 숫자는 정수 분으로 제한했다. 실제 파일을 적용할 때는 첫 행의 헤더와 날짜 형식부터 출력해 확인하고, 예상하지 못한 열이나 빈 값은 조용히 넘기지 않는 편이 낫다. 누락을 자동으로 0으로 바꾸면 보고서가 그럴듯해 보여도 원인을 찾기 어려워진다.

집계 결과는 사람이 읽는 화면과 다음 프로그램이 읽는 파일을 모두 남겼다. 화면에는 입력·보관·제외 행 수를 보이고 weekly_report.csv에는 팀과 분만 적었다. 이렇게 분리하면 회의에서 숫자를 확인하는 사람은 화면을 보고 다음 보고서 단계는 CSV를 사용할 수 있다. 다만 이 파일은 합계만 담으므로 어떤 행이 제외됐는지까지 추적하려면 제외 목록 CSV를 별도로 저장해야 한다. 이번 실험은 중복이 한 행뿐이라 표준 출력에 그 수를 기록했지만, 실제 적용에서는 제외 사유와 원본 파일 이름을 함께 남기는 편이 좋다.

728x90

 

실제 실행 결과
항목 확인 방법
입력 4행 두 CSV 읽기
보관 3행 중복 키 제외
제외 1행 같은 날짜·팀·업무
보고서 운영 60분 / 콘텐츠 45분 weekly_report.csv
중복 한 행을 제외해 팀별 합계를 저장한 실제 Playwright 캡처
실제 실행 뒤 결과 화면. 중복 한 행을 제외한 팀별 합계가 weekly_report.csv에 저장됐다.

실무에서 이 흐름을 반복하려면 파일 이름도 규칙으로 만든다. 예를 들어 월별 폴더 안에 팀별 입력 파일을 두고, 결과 파일에는 실행 날짜와 규칙 버전을 붙이면 나중에 숫자가 달라졌을 때 비교하기 쉽다. 다만 자동으로 폴더 안의 모든 파일을 읽는 방식은 오래된 사본과 내려받은 파일까지 섞을 수 있다. 처음에는 명시적으로 두 파일을 지정하고, 결과가 안정된 뒤에만 대상 폴더와 확장자 제한을 추가하는 편이 안전하다. 또한 분 단위 합계는 단순하지만 근무 시간이나 비용처럼 민감한 값에는 휴게 시간, 시간대, 승인 상태 같은 별도 규칙이 필요하다. 이 예제의 60분과 45분은 테스트 데이터에서 직접 계산한 값일 뿐, 업무량이나 생산성을 측정한 수치가 아니다. 자동화를 조직에 연결할 때는 누가 입력을 수정할 수 있는지, 결과 파일을 어디에 보관하는지, 잘못된 결과를 누가 승인 없이 삭제할 수 있는지도 정해야 한다. 권한이 없는 공유 폴더나 외부 서비스에 원본을 자동 업로드하지 않고 로컬 사본으로 시작한 이유도 여기에 있다. 보고서가 틀렸을 때 가장 빠른 복구는 자동화를 더 복잡하게 만드는 일이 아니라, 입력 파일과 제외 규칙을 다시 읽고 작은 표본으로 재실행하는 일이다.

재현할 때는 먼저 제공한 네 행과 동일한 구조로 파일을 만들고 실행 뒤 결과 CSV를 열어 보자. 입력 행 수와 보관 행 수가 기대와 다르면 즉시 실제 파일 전체에 적용하지 말고, 중복 키에 넣은 열을 한 개씩 확인한다. 이 순서는 수백 행의 보고서에서도 같은 방식으로 작동하지만, 큰 파일의 처리 시간이나 메모리 사용량은 이번에 측정하지 않았으므로 별도 성능 검증이 필요하다.

마지막으로 결과를 다른 사람이 확인할 수 있게 만들려면 실행 조건을 함께 남긴다. 이번에는 운영체제, Python과 Node 버전, Playwright 버전, 입력 파일의 행 수, 실제 표준 출력을 기록했다. 같은 명령이라도 CSV의 인코딩이나 열 이름이 달라지면 결과가 바뀔 수 있으므로, 문제를 전달할 때는 원본 대신 익명화한 최소 입력과 기대 결과를 함께 준비하는 편이 좋다. 이 글의 화면은 모두 그 최소 입력에서 나온 것이며, 실제 고객 정보나 회사 문서는 사용하지 않았다. 보고서 자동화는 한 번의 실행보다 다음 주에도 같은 기준으로 다시 확인할 수 있는 기록을 남길 때 더 쓸모가 커진다.

숫자가 맞는다는 말도 무엇과 비교했는지 없으면 확인할 수 없다. 이번에는 예상한 네 행·세 행·한 행과 실제 출력이 정확히 같은지, 그리고 최종 CSV의 두 팀 합계가 화면에 보인 값과 같은지를 차례로 확인했다. 이처럼 자동화는 입력, 규칙, 출력 세 가지를 한 번에 볼 수 있을 때 수정 범위를 좁히기 쉽다.

코드는 짧고 결과는 파일로 확인한다

실행 출력은 input_rows 4, kept_rows 3, duplicate_rows 1을 기록했다. 새 CSV에는 운영 60, 콘텐츠 45가 저장됐다. 화면만 보지 않고 결과 파일을 다시 읽는 이유는, 자동화의 판단이 최종 파일에도 반영됐는지 확인하기 위해서다.

두 CSV 입력에서 중복을 제외하고 주간 보고서를 만드는 설명 일러스트
실제 화면이 아니라, 이번 실험의 두 입력·중복 제외·주간 보고서 관계를 설명하는 기사 전용 도식이다.

처음 캡처가 실패한 이유

첫 Playwright 캡처는 Chromium 실행 파일이 없어 실패했다. 브라우저를 설치한 뒤 같은 로컬 HTML을 다시 캡처했다. 이 실패는 CSV 처리 실패가 아니라 증거 화면을 만드는 도구 준비 실패였으므로, 둘을 구분해 기록했다.

실제 파일에 적용하기 전 체크

  • 원본 CSV는 복사본으로만 시작한다.
  • 중복을 뜻하는 열과 예외를 팀과 먼저 합의한다.
  • 제외한 행도 별도 목록으로 남긴다.
  • 처음에는 파일 두 개와 수십 행으로 결과를 눈으로 확인한다.
  • 개인정보와 고객 식별자는 캡처·로그에 넣지 않는다.

범위와 되돌리는 방법

이 실험은 날짜·팀·업무가 완전히 같은 행만 제외한다. 오탈자, 시간대, 서로 다른 파일 형식, 금액 합계의 검증까지 해결하지 않는다. 잘못된 규칙이 의심되면 생성한 weekly_report.csv를 버리고 원본 사본에서 기준을 고쳐 다시 실행한다.

자동화의 첫 번째 결과물은 완성된 표가 아니라, 무엇을 같은 일로 볼지 드러낸 기준이다.

참고한 자료

파일을 합치는 일은 복잡한 도구보다 중복 기준을 먼저 문장으로 정하는 일이 중요하다. 작은 공개 테스트 파일에서 결과를 확인한 뒤 실제 업무 파일에는 사본으로 적용하는 편이 안전하다.

직접 확인해보려면다음 주 보고서에서 파일 두 개만 골라, 중복을 판단할 열 세 개를 먼저 적어 보자.
728x90