본문 바로가기

개발/Python

[Python] csv 파일 쓰기

TL;DR

  1. csv 파일 open 및 csv.writer 생성
  2. writerow, writerows를 사용해 내용 작성
  3. close를 통해 기록 종료

csv 파일

데이터를 정리할 때 csv, json, xml, txt 등 여러 다른 형식으로 정리할 수 있다.

csv 파일은 여러 필드에 해당하는 데이터를 ,(콤마)로 구분한 데이터 파일 양식으로, 주로 엑셀(또는 넘버스, 한셀) 등에서 열어서 조회한다. 표로 표현할 수 있는 데이터에 대해서는 csv 파일을 사용했을 때 한눈에 확인하기 쉽다.

 

최근 작업하고 있는 프로젝트에서 파이썬에서 csv 파일을 쓸 일이 있어 이를 정리하려 한다.

 

[그림 1] 파일 쓰기 코드

 

1. 파일 생성 및 writer 생성

csv 파일을 쓰기 위해서는 기본 내장 모듈인 csv를 import 해주어야 한다. 그러고 나면 우선 파일을 생성하고, 파일에 내용을 작성하기 위한 writer를 선언해줘야 한다.

파일을 생성할 경로와 파일명을 입력해주고 모드를 w로 선언해주어야 한다. 그리고 csv 파일에 내용을 입력할 writer 객체를 만들어준다. writer 객체의 파라미터로는 앞서 생성한 csv 파일을 입력해줘야 한다. 이 작업이 끝나면 csv 파일을 쓸 준비가 완료된다.

2. 내용 입력

내용을 작성하는 방법은 writerowwriterows 2가지 방법이 있다.

  • writerow : 한 줄씩 작성하는 방법이다.
  • writerows : 여러 줄을 한 번에 작성하는 방법이다.

각 매개변수에는 문자열 또는 리스트 형태로 주어진 입력이 필요하다. writerow는 한 줄을 csv 포맷에 맞게 작성해주고 writerows는 여러 줄의 데이터를 csv 포맷에 맞게 작성해준다. 정확히 작성하기 위해서는 파라미터를 적절한 형태로 주어야 한다.

 

예시로, object detection 한 결과의 mIoU를 계산한 기록을 저장하기 위한 csv 파일 기록 코드를 가져왔다.

[그림 1]에서는 우선 writerow를 통해 csv 파일의 각 줄이 의미하는 항목을 정의하였다.

그러고 나서는 아래와 같이 데이터를 msgs에 할당하여 여러 줄을 한 꺼번에 작성하도록 하였다.

msgs = [
  [case3-21.jpg,800,534,3,"[[427, 57, 448, 92], [464, 42, 492, 79], [479, 75, 505, 95]]",4,"[[239, 275, 262, 298], [424, 53, 446, 83], [465, 43, 486, 75], [531, 326, 599, 428]]",0.39897610851217014],
  [case1-32.jpg,319,158,5,"[[136, 66, 147, 80], [186, 37, 202, 51], [204, 64, 215, 81], [220, 70, 229, 83], [228, 75, 239, 86]]",6,"[[177, 58, 193, 73], [187, 32, 208, 49], [189, 35, 205, 49], [205, 62, 215, 79], [225, 72, 235, 86], [228, 74, 239, 87]]",0.4592604793044731],
  [case1-25.jpg,300,168,10,"[[59, 44, 72, 61], [87, 21, 100, 41], [102, 16, 115, 35], [120, 24, 133, 41], [131, 102, 153, 119], [140, 70, 160, 87], [149, 40, 166, 59], [168, 28, 183, 49], [192, 32, 206, 51], [216, 52, 231, 73]]",7,"[[57, 45, 73, 61], [87, 23, 98, 40], [102, 16, 113, 33], [151, 42, 163, 58], [169, 29, 183, 49], [195, 32, 206, 48], [220, 53, 231, 68]]",0.7026185153788829],
  [case1-46.jpg,275,183,3,"[[121, 103, 136, 117], [133, 65, 151, 81], [137, 109, 151, 123]]",2,"[[97, 113, 114, 129], [131, 64, 155, 78]]",0.5999999846153851],
  [case1-5.jpg,270,187,2,"[[45, 104, 86, 134], [57, 40, 94, 76]]",2,"[[42, 104, 87, 134], [56, 38, 94, 75]]",0.9042734977894002]
]

마지막 줄에는 mIoU 값을 계산하여 작성하였다. 앞의 값들을 공백으로 둔 이유는 mIoU에 해당하는 내용을 작성하기 위해서이다.

3. 파일 기록 종료

csv 파일을 다 작성한 후에는 파일의 누락을 막기 위해 close 메소드를 통해 종료를 명시해줘야 한다.

 

이렇게 작성을 하고 나면 [그림 2]와 같이 csv 파일을 작성할 수 있다.

 

[그림 2] 완성된 csv 파일

pandas와 같은 라이브러리를 사용할 경우 더 쉽게 작성할 수 있다고 한다. 

출처

csv 쓰기 코드 작성에는 공식 사이트와 아래 2개의 블로그를 참고하였습니다.

[1] python csv 모듈 공식 사이트

 

csv — CSV 파일 읽기와 쓰기 — Python 3.10.0 문서

소위 CSV (Comma Separated Values – 쉼표로 구분된 값) 형식은 스프레드시트와 데이터베이스에 대한 가장 일반적인 가져오기 및 내보내기 형식입니다. CSV 형식은 RFC 4180에서 표준화된 방식으로 형식을

docs.python.org

[2] 림코딩 블로그

 

[Python] 파이썬으로 csv 다루기 (읽기,쓰기,수정,추가)

림코딩의 파이썬으로 csv 다루기 강좌 (읽기,쓰기,수정,추가) 안녕하세요! 림코딩입니다. 데이터 분석업무를 하다보면 엑셀 파일을 다룰때가 참 많습니다. 그러다보면 흔히 '노가다'라는 끝도 없

devpouch.tistory.com

[3] 네로의 다락방 블로그

 

Python으로 CSV 파일 읽기/쓰기: csv 모듈 활용법

안녕하세요! 네로입니다. 블로그를 손 놓기가 싫어서... 뭘 쓸까 하다가, 개발이든 연구든 데이터 다루는 작업을 하다보니 자주 사용하는 코드와 요령들이 있더라구요. 그래서 그러한 내용들을

nerogarret.tistory.com

반응형