본문 바로가기
공부/코딩 개념정리

[Python] csv 파일 처리의 모든 것

by 소소하지만유니크한 2021. 5. 1.
728x90

csv 파일이란?

csv 파일이란 comma separated values 의 약자로 데이터를 저장하는 파일 형식 중 하나입니다. 이름에서 예측할 수 있듯이 record에 저장되는 값들이 ',(comma)'를 이용하여 나열되어 있습니다. 

 

csv파일 읽기

csv파일은 python에서 built-in으로 제공되는 csv 모듈을 사용하여 조작할 수 있습니다만, csv파일도 파일형식이기 때문에 해당 모듈없이도 open() 구문을 사용하여 일반 파일처럼 읽고 쓸 수 있습니다. 

test.csv 내용
a,b,c
1,2,3
4,5,6

 

1. open() 사용하기 

import os

file_name = 'test.csv'

if os.path.exists(file_name):
	f = open(file_name)

...

f.close()

위의 코드 중 '...'으로 생략된 부분에 원하는 작업을 진행할 수 있습니다. 

 

> 한 줄 읽기 

l = f.readline()
print(l)

line = l.split(',')
print(line)

line = l.strip().split(',')
print(line)

output:

a,b,c
['a', 'b', 'c\n']
['a', 'b', 'c']

파일을 연 후, 한 줄을 읽고 print 구문을 이용하면 a,b,c가 출력되지만, 실제 l에는 'a,b,c\n' 가 저장되어 있습니다. 이를 확인하기 가장 쉬운 방법은 strip()을 이용하여 실제로 어떤 값들로 구성되어있는 지 확인하는 것입니다. output의 두 번째 줄처럼 단순히 ',(comma)' 기준으로 문장을 나누면, 마지막 값에는 줄바꿈 문자가 들어가 있음을 알 수 있습니다. 이를 제거하기 위해서는 strip()을 사용해야합니다. 

 

> 한 줄씩 읽기

lines = []
while(True):
	line = f.readline()
	if not line:
		break;
	lines += [line.strip().split(',')]
    
print(lines)

output:

[['a', 'b', 'c'], ['1', '2', '3'], ['4', '5', '6']]

 

> 한 번에 읽기

lines = csv.readlines(f)
print(lines)

output:

['a,b,c\n', '1,2,3\n', '4,5,6\n']

당연히 해당 코드는 close() 대신 with open() 코드로도 대체 가능합니다. 

 

2. csv 모듈 사용하기

제가 애용하는 geeksforgeeks에 있는 내용을 포함하여 작성하였습니다

www.geeksforgeeks.org/working-csv-files-python/

 

Working with csv files in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

# importing csv module
import csv
  
# csv file name
file_name = "test.csv"
  
# initializing the titles and rows list
fields = []
rows = []
  
# reading csv file
with open(file_name, 'r') as csvfile:
    # creating a csv reader object
    csvreader = csv.reader(csvfile)
      
    # extracting field names through first row
    fields = next(csvreader)
  
    # extracting each data row one by one
    for row in csvreader:
        rows.append(row)
  
print(rows)

 

output:

[['1', '2', '3'], ['4', '5', '6']]

코드 상에서 첫 줄은 field 이름들로 먼저 제거했기 때문에 첫줄을 제외한 값들만 들어있음을 알 수 있습니다. 

728x90

댓글