[python 자료구조] 림코딩의 파이썬으로 csv 다루기 강좌 (읽기,쓰기,수정,추가)

안녕하세요! 림코딩입니다. 데이터 분석업무를 하다보면 엑셀 파일을 다룰때가 참 많습니다. 그러다보면 흔히 '노가다'라는 끝도 없는 반복작업을 해야될 순간도 오는데요. 이럴때 프로그래밍 언어를 통해서 이러한 작업을 자동화해주면 많은 시간을 절약할 수 있습니다. 실제로 저도 raw데이터를 가지고 엑셀로 정리할 떄는 파이썬 스크립트를 자주 활용하는데요. 이번 강좌에서는 파이썬 스크립트로 쉽게 엑셀을 다루는 방법을 소개해드리려고 합니다!
 
엑셀 파일 종류는 흔히 xlsx, csv 등이 있는데요. 이번 강좌에서는 가장 다루기 쉬운 csv 파일을 대상으로 설명하려 합니다. csv파일은 xlsx보다 간단한 형식(쉼표로 데이터 구분)이기 떄문에 접근하기 쉬우실 겁니다. 그럼 파이썬으로 csv 파일을 다루는 방법에 대해서 살펴보도록 합시다.
 
 
 

파이썬으로 csv 읽기

파이썬으로 csv파일을 읽기위해서는 csv 모듈을 불러와야 합니다. 이 외에도 판다스를 이용하여 csv를 읽고 처리하는 방법이 있지만 여기에서는 csv 모듈을 활용한 처리만 다루도록 하겠습니다.
 
csv모듈의 reader함수를 이용하여 행별로 데이터를 가져와 루프를 돌면 csv 파일을 읽습니다. 간단한 예제 코드는 아래와 같습니다. 
 
 

코드

import csv
 
f = open('example.csv','r')
rdr = csv.reader(f)
 
for line in rdr:
    print(line)
 
f.close()
 
해당 스크립트를 실행하면 아래와 같이 csv의 행단위로 데이터를 출력합니다.

결과

['사용자명', '지역']
['림코딩', '부산']
['김갑환', '서울']
['최번개', '강원']
['테리보가드', '경기']
 
각 line은 list 형식으로 되어있습니다.
그러므로 아래와 같이 해당 리스트의 인덱스를 지정하면 원하는 열만 가져올 수도 있습니다.
 

코드

for line in rdr:
    print(line[1])

결과

지역
부산
서울
강원
경기
 
 
 

파이썬으로 csv 쓰기

csv모듈을 이용하여 csv 파일을 쓰기 원한다면 writer함수를 사용하면 됩니다. open함수를 통해 파일명을 명시하고(writer.csv) 쓰기 모드를 옵션으로 주면(w) 해당 csv파일에다가 원하는 내용을 쓸 수 있습니다.
하지만 이대로 write를 해버리면 csv파일을 한 행씩 건너뛰면서 데이터를 넣게 되는 문제가 생깁니다. 이를 해결하기 위해 newline=''옵션을 주면 데이터가 띄어쓰기 없이 들어가게 됩니다. 코드는 아래와 같습니다.
 
 

코드

f = open('write.csv','w', newline='')
wr = csv.writer(f)
wr.writerow([1,'림코딩', '부산'])
wr.writerow([2,'김갑환', '서울'])
 
f.close()
 
마찬가지로 행단위로 들어갈때는 list 형식으로 넣게 됩니다.  위 코드를 실행하면 write.csv에 원하는 형식으로 들어가있는 것을 확인할 수 있습니다.
 
 

파이썬으로 csv 행 추가하기

기존에 있는 파일에 새로운 행을 추가할 수 있습니다. 이를 위해서는 파일 오픈시에 open함수에 append모드의 약자인 'a'옵션을 주면 해당 csv파일의 마지막행에 데이터를 추가할 수 있게 됩니다. 예제 코드는 아래와 같습니다.
 
f = open('write.csv','a', newline='')
wr = csv.writer(f)
wr.writerow([3,'최번개', '강원'])
 
f.close()
 
위 코드를 수행하면 마지막에 있던 행 (2,'김갑환', '서울') 아래 행에 데이터가 추가됩니다.
 
 
 

파이썬으로 csv 파일 수정하기

알고보니 '림코딩'의 지역은 서울이라서 림코딩에 해당하는 지역값들을 모두 서울로 바꾸고 싶다면 어떻게 해야할까요? 이를 위해서는 아래와 같이 example.csv에서 '림코딩'에 해당하는 열을 찾고 해당 열의 지역 데이터를 바꾼후 lines라는 새로운 리스트에 저장합니다. 마지막으로 저장된 lines를 writerows함수를 통하여 해당 파일에 덮어쓰면 해당 열이 수정된 채로 새로 파일이 저장됩니다.
 
 
f = open('example.csv','r')
rdr = csv.reader(f)
lines = []
for line in rdr:
    if line[0] == "림코딩":
        line[1] = "서울"
    lines.append(line)
 
f = open('example.csv','w',newline='') #원본을 훼손할 위험이 있으니 다른 파일에 저장하는 것을 추천합니다.
wr = csv.writer(f)
wr.writerows(lines)
 
f.close()
 
 
 
 
 
하지만 위 방법은 원본을 훼손할 수 있는 위험성이 있기 때문에, 임시파일로 데이터를 write한 후 데이터가 잘 들어갔는지 검사하고 다시 example.csv로 데이터를 옮기는 것이 안전합니다.

 

[출처] https://devpouch.tistory.com/55

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
46 [python][Django] [개념] Django는 Web Server가 아니라구요!! file 졸리운_곰 2023.03.11 464
45 [python][Django] [Django] Django Rest Framework에서 request 로깅하기 졸리운_곰 2023.03.11 381
44 [python][Django] Django REST Framework 졸리운_곰 2023.03.10 486
43 [python][Django] Django의 기본 개념 file 졸리운_곰 2023.03.10 473
42 Django 장고 텍스트에디터 사용하기(CKeditor) file 졸리운_곰 2020.11.22 933
41 Django Traffic Monitor + 트래픽 초과 알림 file 졸리운_곰 2020.11.22 513
40 공공 데이터 XML 크롤링을 통해 Django HTML에 띄워보기 file 졸리운_곰 2020.05.05 536
39 파이썬 장고와 워드프레스 연동의 간단한 방법 : Simple django wordpress integration with Django WordPress API library 졸리운_곰 2019.10.28 1200
38 Django의 세션을 이용한 단계별 페이지 만들기 file 졸리운_곰 2019.02.02 880
37 Django 템플릿 (Template) 졸리운_곰 2019.02.02 606
36 python django 기본 file 졸리운_곰 2018.09.02 1097
35 PyCharm과 함께 DJango와 RestFramework를 활용한 웹 사이트 구축하기 file 졸리운_곰 2018.05.22 563
34 Installing Python and Django on WampServer file 졸리운_곰 2018.02.18 740
33 python django 개요 다이어그램 file 졸리운_곰 2018.02.10 937
32 웹서버 중에서 Django를 선택한 이유 졸리운_곰 2017.08.22 1306
31 Django App 생성 file 졸리운_곰 2017.03.06 472
30 Django - 설치 및 Hello World 웹 서비스 만들기 졸리운_곰 2017.03.05 549
29 Learning Django and AngularJS 졸리운_곰 2017.02.06 1694
28 [Django 17] Django 디버깅 file 졸리운_곰 2017.01.28 1185
27 [Django 16] Django - Site Deployment 졸리운_곰 2017.01.28 598
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED