반응형

파이썬 CSV 파일 저장하는 방법: 리스트와 딕셔너리 예제까지

파이썬으로 데이터를 정리하다 보면 엑셀보다 먼저 CSV 파일로 저장해야 하는 경우가 많습니다. 특히 파이썬 CSV 저장 방법은 업무 자동화, 크롤링 결과 정리, 로그 백업 같은 작업에서 자주 쓰입니다. 이번 글에서는 파이썬 CSV 저장을 처음 해보는 분도 바로 따라 할 수 있게 가장 쉬운 예제부터 실무에서 자주 만나는 문제까지 정리해보겠습니다.

CSV 파일이 왜 자주 쓰일까?

CSV는 데이터를 쉼표로 구분해서 저장하는 아주 단순한 형식입니다. 단순하지만 그만큼 호환성이 좋아서 파이썬, 엑셀, 구글 스프레드시트, 데이터 분석 도구에서 모두 쉽게 열 수 있습니다.

  • 엑셀 없이도 표 형식 데이터를 저장할 수 있습니다.
  • 크롤링 결과나 자동화 결과를 빠르게 백업할 수 있습니다.
  • 다른 프로그램으로 넘기기 쉬워서 실무에서 자주 사용됩니다.

파이썬 CSV 저장 기본 방법

가장 기본은 파이썬 내장 모듈인 csv를 사용하는 것입니다. 별도 설치가 필요 없어서 초보자도 바로 시작할 수 있습니다.

1. 리스트 데이터를 CSV로 저장하기

행 단위 데이터가 리스트로 정리되어 있다면 writerow() 또는 writerows()를 사용하면 됩니다.

import csv

rows = [
    ["이름", "부서", "점수"],
    ["민지", "마케팅", 92],
    ["준호", "개발", 88],
    ["서연", "디자인", 95]
]

with open("scores.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.writer(file)
    writer.writerows(rows)

print("CSV 저장 완료")

위 코드를 실행하면 scores.csv 파일이 생성되고, 각 리스트가 한 줄씩 저장됩니다.

2. 한 줄씩 추가해서 저장하기

반복문 안에서 데이터를 하나씩 모으는 경우에는 writerow()가 더 편합니다.

import csv

with open("members.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.writer(file)
    writer.writerow(["이름", "나이", "도시"])
    writer.writerow(["지훈", 27, "서울"])
    writer.writerow(["유진", 31, "부산"])
    writer.writerow(["하늘", 25, "인천"])

헤더를 먼저 쓰고, 그 아래에 데이터를 한 줄씩 추가하는 방식입니다. 실무에서는 이 패턴이 가장 자주 나옵니다.

딕셔너리를 CSV 파일로 저장하는 방법

실무에서는 리스트보다 딕셔너리 형태 데이터가 더 많이 나옵니다. 예를 들어 API 응답, 크롤링 결과, 사용자 정보처럼 항목명이 명확한 데이터는 DictWriter가 훨씬 편합니다.

3. 딕셔너리 리스트 저장하기

import csv

rows = [
    {"이름": "민지", "이메일": "minji@example.com", "가입일": "2026-04-29"},
    {"이름": "준호", "이메일": "junho@example.com", "가입일": "2026-04-28"},
    {"이름": "서연", "이메일": "seoyeon@example.com", "가입일": "2026-04-27"}
]

fieldnames = ["이름", "이메일", "가입일"]

with open("users.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(rows)

print("딕셔너리 CSV 저장 완료")

writeheader()는 첫 줄에 컬럼명을 자동으로 써줍니다. 딕셔너리 키가 많아질수록 이 방식이 훨씬 관리하기 쉽습니다.

실무에서 자주 쓰는 CSV 저장 예제

크롤링 결과 저장

예를 들어 쇼핑몰 상품명과 가격을 수집했다면 아래처럼 바로 CSV로 저장할 수 있습니다.

import csv

products = [
    {"상품명": "무선 키보드", "가격": 39000},
    {"상품명": "노트북 거치대", "가격": 27000},
    {"상품명": "USB 허브", "가격": 18900}
]

with open("products.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.DictWriter(file, fieldnames=["상품명", "가격"])
    writer.writeheader()
    writer.writerows(products)

반복 작업 결과 저장

폴더 정리, 메일 발송, 파일 검사 같은 자동화 작업을 했다면 결과 로그를 CSV로 남겨두는 것도 좋습니다.

import csv

logs = [
    ["파일명", "처리결과"],
    ["report1.pdf", "성공"],
    ["report2.pdf", "성공"],
    ["report3.pdf", "실패"]
]

with open("work_log.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.writer(file)
    writer.writerows(logs)

이렇게 저장해두면 나중에 어떤 파일이 처리됐고 어떤 파일이 실패했는지 한눈에 확인할 수 있습니다.

파이썬 CSV 저장할 때 주의할 점

1. newline=""를 꼭 넣기

윈도우 환경에서는 newline=""를 빼면 줄 사이에 빈 줄이 하나씩 더 들어갈 수 있습니다. CSV 저장할 때는 거의 습관처럼 넣는 것이 좋습니다.

2. 한글이 깨지면 utf-8-sig 확인하기

엑셀에서 CSV를 열었을 때 한글이 깨지는 경우가 있습니다. 이런 경우에는 encoding="utf-8-sig"로 저장하면 해결되는 경우가 많습니다.

3. 쉼표가 들어간 데이터 주의하기

주소나 설명 문장처럼 값 안에 쉼표가 포함될 수 있습니다. 이런 경우에도 csv 모듈을 사용하면 자동으로 적절히 처리해주기 때문에 문자열을 직접 이어 붙여 저장하는 방식보다 안전합니다.

4. 컬럼 순서를 미리 정하기

딕셔너리를 CSV로 저장할 때는 fieldnames 순서를 명확히 정해두는 것이 좋습니다. 그래야 파일 구조가 매번 바뀌지 않고, 후속 처리도 쉬워집니다.

언제 이 방법을 쓰면 좋을까?

  • 크롤링한 데이터를 엑셀로 보기 쉽게 정리하고 싶을 때
  • 반복 업무 결과를 파일로 남기고 싶을 때
  • API 응답 데이터를 표 형식으로 저장하고 싶을 때
  • 나중에 pandas나 엑셀로 다시 불러올 데이터를 먼저 저장할 때

FAQ

Q1. 파이썬 CSV 저장은 pandas 없이도 가능한가요?

가능합니다. 오히려 간단한 저장 작업은 csv 내장 모듈이 더 가볍고 빠릅니다. 표 형태 데이터를 단순히 저장하는 목적이라면 pandas 없이도 충분합니다.

Q2. CSV 파일을 엑셀로 열면 한글이 깨지는 이유는 뭔가요?

대부분 인코딩 문제입니다. 엑셀에서 한글 깨짐을 줄이려면 utf-8-sig로 저장해보는 것이 가장 쉽습니다. 인코딩 개념이 헷갈린다면 기존 글인 [파이썬] 인코딩 & 디코딩도 함께 보면 도움이 됩니다.

Q3. 리스트와 딕셔너리 중 어떤 방식으로 저장하는 게 좋나요?

컬럼 이름이 분명한 데이터라면 딕셔너리가 더 좋습니다. 반대로 단순한 표 형태라면 리스트 저장이 더 빠르고 코드도 짧습니다.

Q4. CSV 저장 전에 먼저 파일 읽기부터 알아야 하나요?

꼭 그렇지는 않지만 파일 입출력 개념을 함께 이해하면 훨씬 쉬워집니다. 기초가 필요하면 [파이썬] 파일 열어서 읽기 글도 같이 보면 좋습니다.

Q5. 저장한 CSV에서 특정 패턴만 뽑아내고 싶다면 어떻게 하나요?

이럴 때는 정규식이 유용합니다. 예를 들어 이메일, 전화번호, 특정 문자열 패턴을 추출할 때는 [파이썬] 정규식 (regular expression) 글과 함께 보면 연결해서 이해하기 좋습니다.

마무리

이번 글에서는 파이썬 CSV 저장 방법을 리스트 예제와 딕셔너리 예제로 나눠서 정리했습니다. 처음에는 단순히 파일 한 개 저장하는 것처럼 보여도, 익숙해지면 크롤링 결과 정리, 자동화 로그 저장, 데이터 백업 같은 실무 작업에 바로 연결할 수 있습니다.

다음 단계에서는 CSV를 저장하는 것에서 끝내지 않고, 저장한 파일을 다시 읽어서 가공하는 흐름까지 이어가면 실력이 더 빨리 붙습니다. 그리고 문자열 패턴 추출이 필요할 때는 정규식 글, 한글 깨짐이 생길 때는 인코딩 글, 파일 입출력 기초를 먼저 보고 싶다면 파일 읽기 글도 함께 참고해보세요.

반응형
반응형

파이썬으로 CSV 파일 읽기: 초보자도 이해하는 예제

파이썬 csv 읽기는 엑셀이나 데이터 파일을 다룰 때 가장 먼저 익혀두면 좋은 기본 작업입니다. 특히 저장된 회원 목록, 매출 데이터, 설문 결과처럼 표 형태의 자료를 불러올 때 파이썬 csv 읽기만 알아도 할 수 있는 일이 꽤 많아집니다. 이번 글에서는 초보자도 이해할 수 있도록 CSV 파일을 읽는 가장 쉬운 방법부터 한글 파일을 다룰 때 주의할 점까지 정리해보겠습니다.

CSV 파일이란 무엇일까?

CSV는 Comma-Separated Values의 약자로, 쉼표를 기준으로 데이터를 나눈 텍스트 파일입니다. 엑셀처럼 표 데이터를 저장할 수 있지만 파일 구조는 훨씬 단순해서 프로그램으로 읽고 쓰기 쉽습니다.

예를 들어 아래처럼 생긴 파일이 CSV입니다.

name,age,city
Alice,25,Seoul
Bob,31,Busan
Charlie,28,Incheon

이 데이터를 파이썬으로 읽으면 행 단위로 처리할 수 있고, 필요한 열만 골라서 사용할 수도 있습니다.

파이썬에서 CSV 파일 읽는 가장 기본적인 방법

파이썬 표준 라이브러리에는 csv 모듈이 있어서 별도 설치 없이 바로 사용할 수 있습니다.

1. 기본 예제

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file)
    
    for row in reader:
        print(row)

실행 결과는 아래처럼 나옵니다.

['name', 'age', 'city']
['Alice', '25', 'Seoul']
['Bob', '31', 'Busan']
['Charlie', '28', 'Incheon']

즉, 한 줄씩 읽어서 리스트 형태로 가져온다고 생각하면 이해하기 쉽습니다.

언제 이 방법을 쓰면 좋을까?

파일 구조가 단순하고, 각 행을 순서대로 읽어서 처리하면 되는 경우에 적합합니다. 예를 들어 이름 목록, 주문 내역, 간단한 로그 파일처럼 열 개수가 정해진 데이터를 다룰 때 편리합니다.

헤더를 제외하고 데이터만 읽는 방법

실무에서는 첫 줄이 제목 행인 경우가 많습니다. 이럴 때는 첫 줄을 건너뛰고 읽는 경우가 많습니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file)
    next(reader)  # 헤더 한 줄 건너뛰기

    for row in reader:
        print(row)

next(reader)를 사용하면 첫 번째 줄을 한 번 읽고 넘어가기 때문에 이후 반복문에서는 실제 데이터만 처리할 수 있습니다.

열 이름으로 읽고 싶다면 DictReader 사용하기

열 순서를 외우지 않고 컬럼 이름 기준으로 데이터를 읽고 싶다면 csv.DictReader가 더 편합니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)

    for row in reader:
        print(row["name"], row["city"])

이 방식은 코드 가독성이 좋아서 초보자에게도 추천할 만합니다. 특히 열 개수가 많아질수록 인덱스보다 키 이름으로 접근하는 편이 실수를 줄이기 좋습니다.

실무에서 자주 쓰는 예제

아래는 CSV에서 특정 조건의 데이터만 찾는 간단한 예제입니다.

import csv

with open("people.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)

    for row in reader:
        if int(row["age"]) >= 30:
            print(f'{row["name"]} / {row["age"]} / {row["city"]}')

이런 식으로 읽어온 데이터를 조건문과 함께 쓰면, 나이가 30 이상인 사람만 추리거나 특정 지역 데이터만 분리하는 작업도 쉽게 할 수 있습니다.

실무 활용 포인트

  • 회원 목록에서 특정 조건에 맞는 사람만 추리기
  • 주문 데이터에서 금액이 큰 항목만 찾기
  • 엑셀에서 저장한 CSV를 읽어 다른 파일로 가공하기
  • 자동화 스크립트의 입력 데이터로 활용하기

한글 CSV 파일을 읽을 때 주의할 점

한국어 CSV를 다룰 때 가장 많이 막히는 부분은 인코딩입니다. 파일은 멀쩡해 보이는데 파이썬에서 읽을 때 한글이 깨지거나 오류가 나는 경우가 있습니다.

import csv

with open("data.csv", "r", encoding="cp949") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

엑셀에서 저장한 한글 CSV는 cp949로 저장된 경우가 많고, 웹이나 개발 환경에서 만든 CSV는 utf-8인 경우가 많습니다. 따라서 파일이 안 읽히면 인코딩을 먼저 의심하는 습관이 중요합니다.

왜 이 부분이 중요할까?

CSV 읽기 자체보다도, 실제 현업에서는 인코딩 문제 때문에 시간을 더 많이 쓰는 경우가 많습니다. 그래서 단순히 코드만 외우기보다 파일이 어떤 환경에서 만들어졌는지도 함께 보는 것이 좋습니다.

파이썬 csv 읽기에서 자주 하는 실수

  • 인코딩을 지정하지 않아서 한글이 깨지는 경우
  • 헤더를 데이터로 같이 처리해서 결과가 꼬이는 경우
  • 숫자 데이터를 문자열 그대로 비교하는 경우
  • 쉼표가 아닌 다른 구분자를 쓰는 파일인데 기본 설정으로 읽는 경우

특히 나이나 금액처럼 숫자로 비교해야 하는 값은 int()float()로 변환해서 처리해야 원하는 결과가 나옵니다.

구분자가 쉼표가 아닐 때는 어떻게 할까?

가끔 CSV처럼 보이지만 실제로는 탭이나 세미콜론으로 구분된 파일도 있습니다. 이럴 때는 delimiter 옵션을 지정하면 됩니다.

import csv

with open("data.csv", "r", encoding="utf-8") as file:
    reader = csv.reader(file, delimiter=";")
    
    for row in reader:
        print(row)

파일을 열어봤는데 한 줄 전체가 하나의 값처럼 들어온다면, 인코딩뿐 아니라 구분자도 함께 확인해보는 것이 좋습니다.

자주 묻는 질문 FAQ

Q1. 파이썬에서 CSV 파일 읽을 때 꼭 csv 모듈을 써야 하나요?

간단한 텍스트 처리라면 open()으로 직접 읽을 수도 있지만, CSV는 구분자와 줄 단위 처리 규칙이 있어서 보통은 csv 모듈을 사용하는 편이 더 안전하고 편합니다.

Q2. utf-8로 읽었는데 오류가 나면 어떻게 해야 하나요?

한글 CSV 파일이라면 cp949utf-8-sig로 다시 시도해보는 것이 좋습니다. 특히 엑셀에서 저장한 파일은 cp949인 경우가 많습니다.

Q3. csv.reader와 DictReader 중 무엇을 쓰는 게 좋나요?

열 개수가 적고 순서가 명확하면 csv.reader도 충분합니다. 하지만 컬럼 이름으로 읽는 편이 이해하기 쉽고 실수도 적어서 초보자라면 DictReader를 더 추천합니다.

Q4. CSV 파일을 읽은 뒤 바로 엑셀처럼 다룰 수 있나요?

CSV는 기본적으로 텍스트 데이터입니다. 읽은 뒤에는 리스트나 딕셔너리 형태로 처리하게 되며, 엑셀 파일처럼 서식까지 포함해서 다루려면 openpyxl 같은 별도 도구가 필요합니다.

마무리

이번 글에서는 파이썬 csv 읽기의 기본 개념, csv.reader 사용법, DictReader 활용, 한글 인코딩 주의점까지 한 번에 정리했습니다. 처음에는 간단한 예제로 시작하고, 익숙해지면 조건 검색이나 자동화 입력 파일 처리까지 확장해보면 좋습니다.

한글 CSV를 읽다가 글자가 깨지거나 UnicodeDecodeError가 났다면 파이썬 CSV 한글 깨짐 해결 방법 글을 같이 보면 바로 도움이 됩니다. 파일을 여는 기본 문법이 아직 익숙하지 않다면 파이썬 파일 열어서 읽기, 문자열 패턴 처리까지 연결해서 공부하고 싶다면 파이썬 정규식 (regular expression) 글도 함께 읽어보세요.

반응형
반응형

openpyxl 셀 색상, 폰트, 너비 설정하는 방법

openpyxl 셀 스타일을 익혀두면 엑셀 자동화 결과를 훨씬 보기 좋게 만들 수 있습니다. 단순히 데이터를 넣는 것에서 끝나지 않고 제목 행 색상, 글자 폰트, 열 너비까지 자동으로 맞추면 실무에서 바로 쓸 수 있는 보고서 형태가 됩니다. 이번 글에서는 openpyxl 셀 스타일을 이용해 셀 색상, 폰트, 열 너비를 설정하는 방법을 예제와 함께 정리해보겠습니다.

왜 openpyxl 셀 스타일이 중요할까?

엑셀 자동화를 처음 할 때는 값만 잘 들어가면 된다고 생각하기 쉽습니다. 하지만 실제 업무에서는 보기 좋은 형식까지 맞춰야 다시 손으로 수정하는 일을 줄일 수 있습니다.

  • 제목 행을 강조해서 가독성을 높일 수 있습니다.
  • 열 너비를 자동으로 넓혀 데이터가 잘리지 않게 만들 수 있습니다.
  • 폰트 크기와 굵기를 조정해 보고서 형태를 깔끔하게 맞출 수 있습니다.

예제 준비: openpyxl 설치

pip install openpyxl

설치가 끝났다면 바로 아래 예제로 셀 스타일을 적용해볼 수 있습니다.

openpyxl로 셀 색상, 폰트, 너비 설정하기

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter

wb = Workbook()
ws = wb.active
ws.title = "매출보고서"

data = [
    ["상품명", "수량", "금액"],
    ["키보드", 3, 90000],
    ["마우스", 5, 75000],
    ["모니터", 2, 400000],
]

for row in data:
    ws.append(row)

# 제목 행 스타일 적용
header_fill = PatternFill(fill_type="solid", fgColor="D9EAF7")
header_font = Font(name="맑은 고딕", bold=True, size=11)
header_alignment = Alignment(horizontal="center")

for cell in ws[1]:
    cell.fill = header_fill
    cell.font = header_font
    cell.alignment = header_alignment

# 데이터 영역 폰트 적용
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
    for cell in row:
        cell.font = Font(name="맑은 고딕", size=10)

# 열 너비 자동 비슷하게 조정
for column_cells in ws.columns:
    max_length = 0
    column = column_cells[0].column
    column_letter = get_column_letter(column)

    for cell in column_cells:
        if cell.value:
            max_length = max(max_length, len(str(cell.value)))

    ws.column_dimensions[column_letter].width = max_length + 4

wb.save("styled_sales.xlsx")

코드 설명

1. 셀 색상 넣기

PatternFill은 셀 배경색을 지정할 때 사용합니다. 아래 코드처럼 제목 행에 연한 파란색을 넣으면 표 구조가 더 잘 보입니다.

header_fill = PatternFill(fill_type="solid", fgColor="D9EAF7")

여기서 fgColor는 색상 코드입니다. 원하는 색으로 바꾸면 다른 느낌의 표도 쉽게 만들 수 있습니다.

2. 폰트 설정하기

Font를 사용하면 글꼴, 굵기, 크기 등을 조정할 수 있습니다. 제목 행은 굵게, 본문은 일반 글씨로 나누면 보고서 형태가 훨씬 정리됩니다.

header_font = Font(name="맑은 고딕", bold=True, size=11)

실무에서는 보통 제목은 bold=True로 강조하고, 데이터 행은 조금 작은 크기로 맞추는 경우가 많습니다.

3. 열 너비 설정하기

자동화로 엑셀을 만들면 가장 자주 생기는 문제가 셀 내용이 잘려 보이는 것입니다. 이럴 때 열 너비를 넉넉하게 잡아주면 바로 읽을 수 있는 파일이 됩니다.

ws.column_dimensions["A"].width = 20

위처럼 직접 지정할 수도 있고, 이번 예제처럼 데이터 길이를 기준으로 비슷하게 자동 조정할 수도 있습니다.

4. 정렬까지 같이 맞추기

표 제목 행은 가운데 정렬을 자주 씁니다. Alignment를 함께 적용하면 더 깔끔한 결과를 만들 수 있습니다.

header_alignment = Alignment(horizontal="center")

실무에서 언제 많이 쓸까?

  • 매출 보고서나 재고 목록을 매일 자동 생성할 때
  • 팀원에게 바로 전달할 엑셀 파일을 꾸며야 할 때
  • CSV 데이터를 엑셀로 옮긴 뒤 보기 좋은 표로 정리할 때
  • 여러 파일을 같은 양식으로 맞춰야 할 때

즉, 단순 저장이 아니라 “바로 전달 가능한 엑셀 결과물”이 필요할 때 openpyxl 셀 스타일이 유용합니다.

주의할 점

색상 코드만 바꿔도 결과 느낌이 달라진다

배경색은 너무 진하면 오히려 가독성이 떨어질 수 있습니다. 제목 행은 연한 색 위주로 시작하는 것이 무난합니다.

폰트 이름은 환경에 따라 다를 수 있다

맑은 고딕처럼 시스템에 있는 폰트를 지정하면 보통 무난하지만, 환경에 따라 다르게 보일 수도 있습니다. 여러 PC에서 공유할 파일이라면 너무 특수한 글꼴은 피하는 편이 좋습니다.

열 너비 자동 조정은 완벽한 자동 맞춤이 아니다

엑셀 프로그램의 실제 자동 맞춤처럼 완전히 동일하게 동작하지는 않습니다. 한글과 숫자 길이가 섞인 경우에는 약간 넉넉하게 값을 주는 편이 안정적입니다.

조금 더 응용해보기

제목 행 테두리까지 넣고 싶을 때

이번 글에서는 색상, 폰트, 너비 중심으로 설명했지만, 다음 단계에서는 테두리와 숫자 서식까지 함께 적용하면 더 완성도 높은 문서를 만들 수 있습니다.

특정 열만 따로 강조하고 싶을 때

예를 들어 금액 열만 굵게 처리하거나, 합계 행만 다른 배경색으로 넣는 식으로도 확장할 수 있습니다. 이런 방식은 월별 정산표나 매출 요약표에서 자주 쓰입니다.

FAQ

Q1. openpyxl로 셀 배경색과 글자색을 같이 바꿀 수 있나요?

A. 가능합니다. PatternFill로 배경색을, Font로 글자색과 굵기 등을 함께 지정할 수 있습니다.

Q2. 열 너비를 자동으로 정확하게 맞출 수 있나요?

A. 완전히 엑셀의 자동 맞춤과 같지는 않지만, 문자열 길이를 기준으로 대부분 충분히 보기 좋게 맞출 수 있습니다.

Q3. 제목 행 말고 특정 셀만 따로 꾸밀 수도 있나요?

A. 가능합니다. 예를 들어 ws["C2"]처럼 특정 셀을 지정해서 개별 스타일을 적용할 수 있습니다.

Q4. openpyxl 셀 스타일은 기존 파일에도 적용할 수 있나요?

A. 가능합니다. load_workbook()으로 기존 파일을 열고 필요한 셀에 스타일을 다시 지정한 뒤 저장하면 됩니다.

정리

openpyxl 셀 스타일을 익히면 단순히 엑셀 파일을 생성하는 수준에서 한 단계 더 나아갈 수 있습니다. 제목 행 배경색, 폰트, 열 너비만 자동으로 맞춰도 결과물이 훨씬 실무형 문서처럼 보입니다.

특히 보고서, 재고표, 명단 파일처럼 다른 사람에게 바로 전달해야 하는 엑셀을 만든다면 스타일 자동화는 생각보다 큰 차이를 만듭니다. 먼저 제목 행 꾸미기부터 적용해보고, 익숙해지면 정렬과 숫자 서식까지 확장해보는 것을 추천합니다.

함께 보면 좋은 글

먼저 엑셀 파일을 새로 만들고 값을 넣는 기본 흐름이 필요하다면 파이썬 엑셀 자동화 방법 글과 함께 보면 이해가 더 쉽습니다.

엑셀과 함께 자주 다루는 텍스트 데이터 흐름이 궁금하다면 파이썬 CSV 한글 깨짐 해결 방법도 이어서 읽어보면 좋습니다.

파일 입출력 기본기가 아직 익숙하지 않다면 파이썬 파일 열어서 읽기 글도 같이 참고해보세요.

반응형
반응형

파이썬 엑셀 자동화 시작하기: openpyxl로 파일 생성, 수정, 저장까지

파이썬을 공부하다 보면 알고리즘 문제 풀이도 중요하지만, 실제로 자주 검색되는 주제는 따로 있습니다. 그중 하나가 바로 파이썬 엑셀 자동화입니다. 회사나 학교에서 반복적으로 엑셀 파일을 정리해야 할 때 Python으로 자동화하면 시간을 크게 줄일 수 있습니다.

이번 글에서는 openpyxl 라이브러리를 사용해서 엑셀 파일을 만들고, 데이터를 입력하고, 기존 파일을 수정한 뒤 저장하는 기본 방법까지 한 번에 정리해보겠습니다.

왜 파이썬 엑셀 자동화가 많이 검색될까?

엑셀은 거의 모든 직군에서 사용합니다. 그래서 파이썬 업무 자동화, 엑셀 자동화, openpyxl 사용법 같은 키워드는 입문자와 실무자 모두 자주 찾는 편입니다.

  • 매일 반복되는 보고서 정리 시간을 줄일 수 있음
  • 엑셀 데이터를 자동으로 입력하거나 수정할 수 있음
  • 파이썬 입문자가 실무 느낌을 내기 좋은 주제임

openpyxl이란?

openpyxl은 파이썬에서 엑셀 파일(.xlsx)을 읽고 쓰는 데 많이 사용하는 라이브러리입니다. 새 파일을 만들 수도 있고, 기존 파일을 불러와서 값을 수정한 뒤 다시 저장할 수도 있습니다.

1. openpyxl 설치하기

pip install openpyxl

설치가 끝났다면 아래처럼 import 해서 사용할 수 있습니다.

from openpyxl import Workbook, load_workbook

2. 새 엑셀 파일 만들기

가장 먼저 해볼 것은 새로운 엑셀 파일 생성입니다.

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "매출정리"

ws["A1"] = "날짜"
ws["B1"] = "상품명"
ws["C1"] = "판매금액"

ws["A2"] = "2026-04-25"
ws["B2"] = "키보드"
ws["C2"] = 35000

wb.save("sales_report.xlsx")

위 코드를 실행하면 sales_report.xlsx 파일이 생성됩니다.

3. 반복문으로 여러 행 한 번에 입력하기

실제로는 한 줄씩 직접 입력하기보다 리스트나 반복문으로 여러 데이터를 넣는 경우가 많습니다.

from openpyxl import Workbook

data = [
    ["날짜", "상품명", "판매금액"],
    ["2026-04-25", "키보드", 35000],
    ["2026-04-25", "마우스", 18000],
    ["2026-04-25", "모니터", 210000],
]

wb = Workbook()
ws = wb.active
ws.title = "판매내역"

for row in data:
    ws.append(row)

wb.save("product_list.xlsx")

append()를 사용하면 행 단위로 데이터를 쉽게 추가할 수 있어서 실무에서 자주 사용합니다.

4. 기존 엑셀 파일 불러와서 수정하기

이미 존재하는 파일을 수정하려면 load_workbook()을 사용하면 됩니다.

from openpyxl import load_workbook

wb = load_workbook("product_list.xlsx")
ws = wb["판매내역"]

ws["D1"] = "비고"
ws["D2"] = "주문완료"
ws["D3"] = "배송준비"
ws["D4"] = "출고완료"

wb.save("product_list.xlsx")

이렇게 하면 기존 파일에 새로운 열을 추가할 수 있습니다.

5. 셀 값 읽어오기

엑셀 자동화에서는 값을 입력하는 것만큼 읽어오는 것도 중요합니다.

from openpyxl import load_workbook

wb = load_workbook("product_list.xlsx")
ws = wb["판매내역"]

print(ws["A2"].value)
print(ws["B3"].value)
print(ws["C4"].value)

출력 결과는 각 셀에 저장된 값입니다. 이 값을 활용하면 조건에 따라 다른 작업을 수행하는 자동화도 만들 수 있습니다.

6. 실무에서 자주 쓰는 예시

openpyxl은 아래 같은 작업에서 특히 유용합니다.

  • 매일 들어오는 주문 데이터를 한 파일로 정리하기
  • 출석부, 가계부, 매출표 자동 생성하기
  • 반복되는 보고서 양식에 값 채워 넣기
  • 여러 엑셀 파일의 데이터를 읽어 한 번에 합치기

7. openpyxl 사용 시 주의할 점

  • save()를 호출하면 같은 파일명이 있을 때 덮어쓰기 될 수 있음
  • 너무 큰 파일은 처리 속도가 느릴 수 있음
  • .xlsx 작업에 특히 많이 사용됨

정리

오늘은 파이썬 엑셀 자동화의 가장 기본이 되는 openpyxl 사용법을 정리해봤습니다. 새 파일 생성, 데이터 입력, 기존 파일 수정, 셀 값 읽기까지 익혀두면 이후에는 보고서 자동화나 업무 자동화로 확장하기 쉬워집니다.

파이썬을 공부 중이라면 알고리즘 문제 풀이도 좋지만, 이렇게 실제로 바로 써먹을 수 있는 자동화 주제를 함께 공부하면 검색 유입도 잘 잡히고 블로그 주제 확장에도 도움이 됩니다.

자주 묻는 질문

Q. openpyxl은 엑셀이 컴퓨터에 설치되어 있어야 하나요?

아니요. 기본적인 읽기/쓰기 작업은 엑셀이 설치되어 있지 않아도 가능합니다.

Q. 파이썬 엑셀 자동화는 초보자도 가능한가요?

네. 반복문과 리스트 정도만 알아도 기본 자동화는 충분히 시작할 수 있습니다.

Q. 어떤 사람이 이 주제를 가장 많이 찾나요?

사무직, 대학생, 데이터 정리 업무가 많은 사람, 그리고 파이썬 입문자가 많이 검색하는 편입니다.

다음 글에서는 openpyxl로 셀 색상, 너비, 폰트까지 자동으로 꾸미는 방법도 정리해보겠습니다.

반응형
반응형

파이썬 CSV 한글 깨짐 해결 방법

파이썬으로 CSV 파일을 읽다가 한글이 깨지거나 UnicodeDecodeError가 뜨면 정말 당황스럽죠.

저도 처음에는 왜 파일은 멀쩡한데 파이썬에서만 오류가 나는지 헷갈렸는데, 알고 보면 대부분 인코딩 방식이 맞지 않아서 생기는 문제였어요.

이번 글에서는 파이썬 CSV 한글 깨짐, UnicodeDecodeError 해결, 그리고 cp949 / utf-8 차이까지 한 번에 정리해볼게요.

반응형

왜 이런 오류가 생길까?

CSV 파일은 겉으로 보기에는 그냥 텍스트 파일이지만, 실제로는 어떤 방식으로 문자를 저장했는지가 중요해요.

  • utf-8: 웹이나 개발 환경에서 가장 많이 사용하는 인코딩
  • cp949: 윈도우 환경, 특히 한글 CSV에서 자주 나오는 인코딩
  • euc-kr: 예전 한글 문서에서 종종 보이는 인코딩

즉, 파일은 cp949로 저장되어 있는데 파이썬에서 utf-8로 읽으려고 하면 오류가 납니다.

대표적인 오류 메시지

UnicodeDecodeError: 'utf-8' codec can't decode byte ...

이 에러는 보통 utf-8이 아닌 파일을 utf-8로 읽었을 때 발생합니다.

가장 먼저 해볼 해결 방법

pandas로 CSV를 읽는다면 encoding 옵션을 직접 넣어보세요.

import pandas as pd

df = pd.read_csv("data.csv", encoding="cp949")
print(df.head())

만약 이 방법으로 잘 열리면 파일이 cp949 계열이었다는 뜻입니다.

utf-8 파일이라면?

import pandas as pd

df = pd.read_csv("data.csv", encoding="utf-8")
print(df.head())

간혹 UTF-8 BOM 때문에 문제가 생기는 경우도 있어서 이럴 때는 아래처럼 해보면 됩니다.

import pandas as pd

df = pd.read_csv("data.csv", encoding="utf-8-sig")
print(df.head())

open()으로 파일을 읽을 때도 똑같아요

with open("data.csv", "r", encoding="cp949") as f:
    text = f.read()
    print(text)

read_csv()open()이든 핵심은 같습니다. 파일의 실제 인코딩과 코드에서 지정한 인코딩을 맞추는 것이에요.

cp949와 utf-8 중 뭘 쓰면 될까?

  • 엑셀에서 저장한 한글 CSV: cp949 먼저 시도
  • 웹에서 내려받은 데이터나 개발용 파일: utf-8 먼저 시도
  • UTF-8인데도 이상하면: utf-8-sig 확인

실전에서 가장 많이 쓰는 코드

import pandas as pd

try:
    df = pd.read_csv("data.csv", encoding="utf-8")
except UnicodeDecodeError:
    df = pd.read_csv("data.csv", encoding="cp949")

print(df.head())

이렇게 작성하면 utf-8로 먼저 읽고, 안 되면 cp949로 다시 읽을 수 있어서 실무에서도 꽤 편리해요.

한글이 깨질 때 체크할 것

  • 파일을 어느 프로그램에서 저장했는지 확인하기
  • 엑셀 저장 파일이면 cp949 가능성 먼저 보기
  • 웹/개발 도구에서 만든 파일이면 utf-8 확인하기
  • utf-8-sig도 같이 테스트해보기

정리

파이썬 CSV 한글 깨짐 문제는 대부분 인코딩 mismatch 때문에 생깁니다.

가장 많이 쓰는 해결 순서는 아래처럼 생각하면 편해요.

  1. utf-8로 시도한다
  2. 안 되면 cp949로 시도한다
  3. 그래도 이상하면 utf-8-sig를 확인한다

저처럼 처음에 인코딩 때문에 시간을 많이 쓰는 분들께 도움이 되었으면 좋겠어요. 다음에는 pandas read_csv 자주 나는 오류도 정리해보겠습니다.

함께 보면 좋은 글

파이썬에서 문자열, 인코딩, 파일 입출력을 같이 이해해두면 이런 오류를 훨씬 빨리 해결할 수 있어요.

반응형
반응형

**ord()**

- 해당되는 것이 아스키 코드에서 몇 번인지 알려준다

 ex) print(ord('a'))

 

 

**아스키 코드**

- 미국표준코드표기. 알파벳으로 표현 가능한 언어를 표현할 수 있는 코드이다. 

- 다른 나라의 언어는 표기할 수 없다는 것이 단점이다.

 

 

**유니 코드**

- 유니 코드는 표현될 수 있는 공간이 넓어서 많은 나라의 언어를 표기할 수 있다.

- 그러나 용량이 너무 크다. 

 

 

**UTF - 8**

- 1~4 byte 까지 필요에 따라 크기를 조정할 수 있다. 

- 아스키 코드와 호환이 가능하다. 

- 네트워크에서 보낼 때, 용량을 줄일 수 있어 많이 사용된다. 

 

 

오랜만에 공부해요!!ㅜㅜ

이제 다시 열심히 달려야죠!! 요근래 너무 게을러 진 것 같아서 걱정이에요...

다시 파이팅!! 

반응형
반응형

오늘은 책에서 COM이라는 것을 배웠습니다. 

이것은 마이크로소프트에서 제공해주는 것으로 우리가 크롬, 엑셀 등을 파이썬으로 다룰 수 있게 도와줍니다. 

 

일단 간단한 코드를 하나 작성해 보았습니다. 

 


import win32com.client

excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets("Sheet1")
ws.cells(1, 1).value = "hello"
wb.SaveAs('C:\\Users\\이윤진\\1st')
excel.Quit()

 


이 코드는 엑셀 파일을 열어 (1, 1)의 자리에 hello를 적는 아주 간단한 코드입니다. 

 

이 코드를 처음 작성했을 때는 엑셀 파일의 저장 장소를 \ (백슬래시)로만 작성하여서 파일이 제대로 작동하지 않았습니다. 

파일을 어떤 장소에 저장할 때는 반드시 저장장소를 \\로 작성해야합니다. 

반응형
반응형

안녕하세요! 

드디어 과제를 모두 마치고! 드디어 종강을 했습니다!

 

종강을 했으니 파이썬 공부를 본격적으로 시작해보려고 합니다.

 

첫 번째 목표는 '파이썬으로 배우는 알고리즘 트레이딩 : 내 손으로 만드는 자동 주식 거래 시스템' 이라는 책을 읽고 알고리즘을 만들어 보는 것입니다.

이 페이지에는 책에 나오는 파이썬 문법을 정리하려고 합니다.

 

 

**자료구조**

 

 1. 튜플

     - 리스트와 비슷하다. 

     - 장점: 리스트보다 속도가 빠르다.

     - 단점: 튜플 안의 원소를 수정할 수 없다. 

        ex) a = ('밥', '김치')

     -리스트와 달리 ( )로 원소들을 묶는다.

 

 2. 딕셔너리

     - 키(key)와 값(value)로 저장한다. 

     - { }로 키와 원소들을 묶는다. 

        ex) a = { }

             a['key'] = value

             a = {['key'] : value}

     - 인덱싱을 지원하지 않는다.

     - insert와 append를 지원하지 않는다. 

     - del은 지원한다. 

        ex) del a['key']

 

     //딕셔너리에 사용하는 함수

        1. keys()

            - 딕셔너리 안에 있는 키들을 표시

              ex) a.keys()

                   list(a.keys())

        2. value()

            - 딕셔너리 안에 있는 값들을 표시

 

 

 

**파이썬 내장 함수**

 

 1. abs()

    - 입력 받은 정수, 실수의 절댓값을 표현한다. 

    - 절댓값 = absolute value

 

 2. enumerate()

    - 시퀀스 자료형 (리스트, 튜플, 문자열) 을 입력받은 후 enumerate 객체로 값을 반환한다. 

    - enumerate = 열거하다 

    - 코드 줄 수를 줄이는 데 사용

    - 굳이 리스트 안의 원소를 써주지 않아도 된다. a in enumerate(list) 식으로 사용 

 

 3. id()

    - 변수의 주솟값 출력

 

 4. sorted()

    - 입력값을 나열하여 입력하면 정렬해서 리스트로 출력한다.

 

 

**Class**

: 클래스란 하나의 타입을 만들어주는 것이다.

  -클래스 안에서 정의된 함수는 메서드라고 불린다. 

  (저는 이게 C의 typedef struct 와 비슷하게 느껴집니다.)

 

  

반응형

+ Recent posts