파이썬에서 기본 모듈 `csv`을 이용해 `csv` 형식 파일로 자료를 저장하기
pandas
(이하 판다스)를 이용하면 숫자를 다루는 것이 편하지만, 판다스를 설치할 수 없는 환경에 있거나 굳이 판다스까지 설치할 필요가 없지만, 자료를 csv
형식으로 저장해야할 때가 있습니다. 이때를 대비하여 파이썬이 가지고 있는 기본 모듈로 csv
파일을 저장해 봅시다. 가장 단순 한 자료부터 시작해 봅시다. 우선 저장할 자료를 만들어봅시다.
a = [['20200906', 'NCSS1'],['20201028', 'HHLG0']]
실행 결과는 다음과 같습니다.
>>> a
[['20200906', 'NCSS1'], ['20201028', 'HHLG0']]
이 a
의 자료 구조는 아주 단순합니다. 2개의 원소를 가진 list
를 가지고 있는 list
입니다. 각 list
모두 첫 번째는 숫자로 두 번째는 문자열을 가지고 있습니다. csv
파일에서 숫자로 되어 있는 부분은 첫 번째 컬럼에 들어 가고 두번째 문자열로 되어 있는 부분은 두 번재 컬럼에 들어갈 것입니다. 그러면 저장해 봅시다.
import csv
with open("out.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(a)
여기서 살펴봐야 하는 부분은 writer.writerows(a)
입니다. a
를 한 줄씩 파일에 저장하고 있는 것을 확인할 수 있습니다. out.csv
파일을 확인해 보면, 다음과 같이 저장된 것을 확인할 수 있습니다.
20200906,NCSS1
20201028,HHLG0
앞에서 저장한 a
자료에는 컬럼 이름이 없었습니다. 이번에는 컬럼 이름을 가지고 있는 자료를 저장해 봅시다. 저장할 자료를 하나 만들겠습니다.
data = [
{"ID": "A1", "X1": 1, "X2": 3.0},
{"ID": "A2", "X1": 2, "X2": 4.5},
{"ID": "A3", "X1": 3, "X2": 3.2},
{"ID": "A4", "X1": 4, "X2": 4.0},
{"ID": "A5", "X1": 5, "X2": 3.5},
]
실행 결과는 다음과 같습니다.
>>> data = [
... {"ID": "A1", "X1": 1, "X2": 3.0},
... {"ID": "A2", "X1": 2, "X2": 4.5},
... {"ID": "A3", "X1": 3, "X2": 3.2},
... {"ID": "A4", "X1": 4, "X2": 4.0},
... {"ID": "A5", "X1": 5, "X2": 3.5},
... ]
이 자료는 앞에서 저장했던 a
와 자료 구조가 전혀 다릅니다. data
는 4개의 dict
를 가지고 있는 list
입니다. 모든 dict
는 같은 키, 'ID', 'X1', 'X2'
를 가지고 있고 가지고 있는 값 또한 같은 형식입니다. 여기서 'ID', 'X1', 'X2'
가 컬럼 이름으로 될 것입니다. 그리고 그 키를 기준으로 파일을 저장하게 됩니다. 이 자료를 저장해 봅시다.
import csv
with open("data_out.csv", "w", newline="") as f:
fieldnames = ['ID', 'X1', 'X2']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for item in data:
writer.writerow(item)
여기서 주의할 코드를 살펴보겠습니다. 첫 번째로 컬럼 이름을 저장하는 부분입니다.
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
이 부분에서 fieldnames = ['ID', 'X1', 'X2']
을 컬럼 이름으로 만듭니다. 이를 토대로 data
리스트를 한 개씩 읽어서 적절하게 저장하게 됩니다. 자료를 저장하는 코드는 다음 코드 입니다.
for item in data:
writer.writerow(item)
이 코드가 data
리스트를 한 개씩 읽어서 컬럼 이름에 맞게 한 줄씩 저장하게 됩니다. 실행 결과는 다음과 같습니다.
>>> with open("data_out.csv", "w", newline="") as f:
... fieldnames = ['ID', 'X1', 'X2']
... writer = csv.DictWriter(f, fieldnames=fieldnames)
... writer.writeheader()
... for item in data:
... writer.writerow(item)
...
10
10
10
10
10
10
이렇게 만들어어진 data_out.csv
파일을 확인해 보면, 다음과 같이 저장된 것을 확인할 수 있습니다. 컬럼 이름도 적절하게 들어있습니다.
ID,X1,X2
A1,1,3.0
A2,2,4.5
A3,3,3.2
A4,4,4.0
A5,5,3.5