본문 바로가기
카테고리 없음

파일 처리 심화: JSON, CSV, XML 다루기

by python note 2025. 6. 9.

파이썬 파일 처리 심화: JSON, CSV, XML 완벽 이해 및 활용

파이썬으로 프로그래밍을 하다 보면 다양한 형태의 데이터를 저장하고 다른 프로그램과 주고받아야 할 때가 많습니다. 이번 시간에는 데이터를 특정 규칙에 맞춰 정리하고 저장하는 대표적인 세 가지 파일 형식, 바로 JSON, CSV, XML 파일을 파이썬으로 다루는 방법을 심도 있게 배워보겠습니다.

이 파일 형식들은 웹사이트에서 정보를 가져오거나(웹 크롤링), 프로그램 간에 데이터를 주고받거나, 복잡한 설정 정보를 저장하는 등 다양한 곳에서 사용됩니다. 마치 세상의 다양한 정보를 우리가 이해할 수 있는 언어로 번역하여 기록하고 다시 읽는 것과 같다고 생각하시면 됩니다. 이 강의를 통해 여러분은 파이썬으로 데이터를 자유롭게 다루는 핵심 기술을 습득하게 될 것입니다.

파일 처리, 왜 중요할까요?

컴퓨터는 우리가 프로그램을 끄면 대부분의 정보(데이터)를 잊어버립니다. 그래서 중요한 정보는 파일에 저장해야 합니다. 파일 처리는 데이터를 영구적으로 저장하고, 필요할 때 다시 불러와 사용하거나 다른 사람(또는 다른 프로그램)과 데이터를 주고받기 위해 필수적인 기술입니다.
특히 JSON, CSV, XML은 규칙이 명확하여 컴퓨터가 쉽게 이해하고 처리할 수 있는 '정형화된' 데이터 형식입니다. 이 세 가지 형식은 각각의 장단점과 사용 목적이 있습니다. 마치 똑같은 정보를 저장하더라도 '일기장', '표', '편지' 등 용도에 따라 형식을 다르게 쓰는 것과 같습니다.

1. JSON 파일 다루기: 웹 데이터의 표준

JSON (JavaScript Object Notation)은 웹에서 데이터를 주고받을 때 가장 많이 사용되는 형식입니다. 사람도 읽기 쉽고, 컴퓨터도 처리하기 쉬운 것이 장점입니다. 마치 '디지털 명함'처럼 정보를 '이름: 값'의 형태로 깔끔하게 정리합니다.

JSON 파일에 데이터 쓰기

파이썬의 json 모듈을 사용하면 파이썬의 '딕셔너리'나 '리스트' 같은 데이터를 JSON 형식으로 파일에 저장할 수 있습니다. json.dump() 함수가 이 역할을 합니다.

Python
# json 모듈을 가져옵니다. import json # 저장할 데이터 (딕셔너리 형태) student_data = { "name": "김철수", "age": 13, "grade": "초등학교 6학년", "hobbies": ["독서", "축구"] } # 'student.json' 파일을 쓰기 모드('w')로 엽니다. with open('student.json', 'w', encoding='utf-8') as f: # 딕셔너리 데이터를 JSON 파일로 저장합니다. json.dump(student_data, f, indent=4, ensure_ascii=False) print("student.json 파일이 생성되었습니다.")

위 코드를 실행하면 student.json 파일이 생성되며 다음과 같은 내용이 저장됩니다. (indent=4는 들여쓰기 크기, ensure_ascii=False는 한글 깨짐 방지입니다.)

student.json 내용
{ "name": "김철수", "age": 13, "grade": "초등학교 6학년", "hobbies": [ "독서", "축구" ] }

JSON 파일에서 데이터 읽기

저장된 JSON 파일을 읽어올 때는 json.load() 함수를 사용합니다. 이 함수는 JSON 데이터를 다시 파이썬의 딕셔너리나 리스트 형태로 바꿔줍니다.

Python
# json 모듈을 가져옵니다. import json # 'student.json' 파일을 읽기 모드('r')로 엽니다. with open('student.json', 'r', encoding='utf-8') as f: # JSON 데이터를 파이썬 딕셔너리로 불러옵니다. loaded_data = json.load(f) print("불러온 데이터:", loaded_data) print("이름:", loaded_data['name']) print("취미:", loaded_data['hobbies'])

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
불러온 데이터: {'name': '김철수', 'age': 13, 'grade': '초등학교 6학년', 'hobbies': ['독서', '축구']} 이름: 김철수 취미: ['독서', '축구']

2. CSV 파일 다루기: 표 형태 데이터의 강자

CSV (Comma Separated Values) 파일은 '쉼표로 구분된 값'이라는 뜻 그대로, 쉼표를 기준으로 데이터를 구분하여 저장하는 방식입니다. 엑셀이나 구글 스프레드시트에서 표 형태의 데이터를 저장하고 주고받을 때 매우 유용합니다. 마치 단순한 표를 종이에 그리는 것과 같습니다.

CSV 파일에 데이터 쓰기

파이썬의 csv 모듈을 사용하여 데이터를 CSV 파일에 쓸 수 있습니다. 각 줄이 하나의 데이터 묶음이 되고, 쉼표로 각 항목이 구분됩니다. csv.writer를 만들고 writerow() 또는 writerows()로 데이터를 씁니다.

Python
# csv 모듈을 가져옵니다. import csv # 헤더와 데이터를 리스트 형태로 준비합니다. header = ['상품명', '가격', '재고'] data = [ ['사과', 1500, 100], ['바나나', 2000, 50], ['딸기', 3000, 75] ] # 'products.csv' 파일을 쓰기 모드('w')로 엽니다. newline=''은 빈 줄 방지입니다. with open('products.csv', 'w', newline='', encoding='utf-8') as f: # CSV 파일에 쓸 준비를 합니다. writer = csv.writer(f) # 헤더를 먼저 씁니다. writer.writerow(header) # 여러 줄의 데이터를 씁니다. writer.writerows(data) print("products.csv 파일이 생성되었습니다.")

위 코드를 실행하면 products.csv 파일이 생성되며 다음과 같은 내용이 저장됩니다.

products.csv 내용
상품명,가격,재고 사과,1500,100 바나나,2000,50 딸기,3000,75

CSV 파일에서 데이터 읽기

CSV 파일에서 데이터를 읽어올 때는 csv.reader를 사용합니다. 각 줄을 리스트 형태로 가져올 수 있습니다.

Python
# csv 모듈을 가져옵니다. import csv # 'products.csv' 파일을 읽기 모드('r')로 엽니다. with open('products.csv', 'r', encoding='utf-8') as f: # CSV 파일 내용을 읽을 준비를 합니다. reader = csv.reader(f) # 각 줄을 순서대로 읽어서 출력합니다. for row in reader: print(row)

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
['상품명', '가격', '재고'] ['사과', '1500', '100'] ['바나나', '2000', '50'] ['딸기', '3000', '75']

3. XML 파일 다루기: 계층적 데이터의 표현

XML (Extensible Markup Language)은 데이터를 '태그'라는 꼬리표를 이용해 계층적으로 표현하는 방식입니다. HTML과 비슷하지만, 데이터의 '내용'을 정의하는 데 초점을 맞춥니다. 마치 복잡한 책의 목차처럼, 정보를 큰 묶음 안에 작은 묶음으로 정리할 때 유용합니다.

XML 파일에 데이터 쓰기

파이썬은 xml.etree.ElementTree 모듈을 사용하여 XML 데이터를 만들고 파일로 저장할 수 있습니다. 각 정보는 '요소(Element)'가 되며, 이 요소들이 나무처럼 가지를 뻗어나가는 구조를 이룹니다.

Python
# XML 처리를 위한 모듈을 가져옵니다. import xml.etree.ElementTree as ET # 최상위 요소(루트)를 만듭니다. root = ET.Element("도서목록") # 첫 번째 책 정보를 추가합니다. book1 = ET.SubElement(root, "책", id="B001") title1 = ET.SubElement(book1, "제목") title1.text = "파이썬 기초" author1 = ET.SubElement(book1, "저자") author1.text = "홍길동" # 두 번째 책 정보를 추가합니다. book2 = ET.SubElement(root, "책", id="B002") title2 = ET.SubElement(book2, "제목") title2.text = "데이터 과학 입문" author2 = ET.SubElement(book2, "저자") author2.text = "김영희" # ElementTree 객체를 만들고 파일로 저장합니다. tree = ET.ElementTree(root) tree.write('books.xml', encoding='utf-8', xml_declaration=True) print("books.xml 파일이 생성되었습니다.")

위 코드를 실행하면 books.xml 파일이 생성되며 다음과 같은 내용이 저장됩니다. (들여쓰기 등은 실제 파일과 다를 수 있습니다.)

books.xml 내용
<?xml version='1.0' encoding='utf-8'?> <도서목록> <책 id="B001"> <제목>파이썬 기초</제목> <저자>홍길동</저자> </책> <책 id="B002"> <제목>데이터 과학 입문</제목> <저자>김영희</저자> </책> </도서목록>

XML 파일에서 데이터 읽기

저장된 XML 파일에서 데이터를 읽어올 때는 ET.parse()로 파일을 분석하고, .find().findall() 같은 메서드로 원하는 요소를 찾을 수 있습니다.

Python
# XML 처리를 위한 모듈을 가져옵니다. import xml.etree.ElementTree as ET # 'books.xml' 파일을 분석(파싱)합니다. tree = ET.parse('books.xml') root = tree.getroot() # 최상위 요소를 가져옵니다. print("도서 목록:") # '책' 요소를 모두 찾아서 반복합니다. for book in root.findall('책'): book_id = book.get('id') # 'id' 속성 값을 가져옵니다. title = book.find('제목').text # '제목' 요소의 텍스트를 가져옵니다. author = book.find('저자').text # '저자' 요소의 텍스트를 가져옵니다. print(f"ID: {book_id}, 제목: {title}, 저자: {author}")

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
도서 목록: ID: B001, 제목: 파이썬 기초, 저자: 홍길동 ID: B002, 제목: 데이터 과학 입문, 저자: 김영희

중요:

파일을 열 때는 with open(...) as f: 구문을 사용하는 것이 안전합니다. 이 구문은 파일 작업을 마치면 자동으로 파일을 닫아주기 때문에, 파일을 닫는 것을 잊어버려 생길 수 있는 문제를 방지합니다.

주의:

파일을 저장하거나 불러올 때 인코딩(encoding) 문제가 발생할 수 있습니다. 특히 한글이 포함된 데이터를 다룰 때는 encoding='utf-8'을 명시적으로 지정하는 것이 좋습니다. 이 설정은 전 세계의 다양한 문자를 잘 처리할 수 있도록 돕습니다.

핵심 : JSON은 딕셔너리/리스트 형태의 웹 데이터, CSV는 쉼표로 구분된 표 형태 데이터, XML은 태그 기반의 계층적 데이터를 다루는 데 사용됩니다. 각 파일 형식은 파이썬의 전용 모듈을 통해 쉽게 읽고 쓸 수 있습니다.

마무리 요약

이번 시간에는 파이썬으로 JSON, CSV, XML 파일을 읽고 쓰는 심화된 파일 처리 방법을 학습했습니다. 각 파일 형식은 데이터의 특징과 사용 목적에 따라 적절히 선택하여 사용하면 됩니다.

이 지식은 웹 크롤링, 데이터 분석, 프로그램 설정 등 다양한 실제 파이썬 프로젝트에서 강력한 도구가 될 것입니다. 다음 강의에서는 파이썬으로 외부 웹사이트의 데이터를 자동으로 가져오는 '웹 크롤링'의 기초를 배워보겠습니다.

질문이 있다면 댓글에 남겨주세요.