AngelPlayer`s Diary

테스트를 위해서 임의의 csv 파일을 생성하였습니다.

# pharm_angelplayer.csv
약국명, 지역, 주소, 개설일자, 경도, 위도 
영미약국, 용인처인구, 경기도 용인시 처인구 금령로 73 (김량장동), 20130701,127.2043559,37.2352302 
파랑새약국, 인천미추홀구, 인천광역시 미추홀구 장천로112번길 3 (숭의동), 20130701,126.6565669,37.4629140 
새봄약국, 용인기흥구, 경기도 용인시 기흥구 서천로 121 원희캐슬 110호 (서천동), 20130701,127.0727467,37.2371531 
헬스팜약국, 의정부시, 경기도 의정부시 태평로 110 1층 (의정부동), 20170710,127.0518480,37.7423707] 
플러스약국, 부천시, "경기도 부천시 상동로 90 313호 (상동, 메가플러스) ", 20130701,126.7537046, 37.5051817 
봄약국, 인천서구, "인천광역시 서구 중봉대로 588 302-1호 (연희동, 청라센트럴프라자)", 20130701, 126.6502817, 37.5320802 
시원약국, 고양일산서구, 경기도 고양시 일산서구 일산로 523 보성상가 103호 (일산동), 20180518,126.7694542, 37.6766742 
해밀온누리약국, 인천남동구, 인천광역시 남동구 서창남순환로 56 (서창동), 20180906,126.7511151, 37.4290505 
백화점약국, 안산상록구, 경기도 안산시 상록구 석호로 292 1층 (본오동), 20130701,126.8631112, 37.2933492 
혜민약국, 양주시, 경기도 양주시 백석읍 호명로 57 (백석읍), 20130715,126.9928716, 37.7883156 
다정약국, 고양일산서구, 경기도 고양시 일산서구 일청로 15-1 1층 (일산동), 20130712,126.7702687,37.6859421 
중앙약국, 의정부시, "경기도 의정부시 민락로 210 3층 (민락동, 이마트)",20130715,127.1023779, 37.7431936 
새안양보룡약국, 안양만안구, 경기도 안양시 만안구 안양로 259 1층 (안양동), 20150701,126.9236301, 37.3957263 
일산선약국, 고양일산서구, "경기도 고양시 일산서구 가좌1로 53 110호 (가좌동, 샤르망프라자)", 20130729,126.7189579,37.6875531 
우리약국, 수원영통구, "경기도 수원시 영통구 센트럴타운로 15 111호 (이의동, 아이플렉스)", 20130730,127.0572871, 37.2881647 
다원약국, 성남수정구, 경기도 성남시 수정구 산성대로 241 5층 (신흥동), 20181101,127.1440896, 37.4399478 
열린연세약국, 인천미추홀구, "인천광역시 미추홀구 토금남로 53 (용현동, 한양프라자 105호)", 20130801,126.6380949,37.4508199 
국민약국, 구리시, 경기도 구리시 검배로 104 (수택동), 20130801,127.1494178,37.5944455 
고읍태양약국, 양주시, "경기도 양주시 고읍남로 6-16 107호 (광사동, 광장프라자)", 20160321,127.0789293,37.7957045 
안녕약국, 화성시, "경기도 화성시 용주로 22 2층 (안녕동, 태안농협안녕지점)",20150907, 127.0142547, 37.2054837 
중앙약국, 성남분당구, "경기도 성남시 분당구 돌마로 478 102호 (서현동, 효자촌프라자)", 20130801,127.1334348,37.3769796 
소나무약국, 의정부시, 경기도 의정부시 장곡로 224 롯데마트장암점 2층 (장암동), 20180707,127.0530478,37.7237040 
열린온누리약국, 시흥시, 경기도 시흥시 함송로14번길 13-13 (정왕동), 20130801,126.7296148,37.3626898 
우리팜아름약국, 인천연수구, "인천광역시 연수구 용담로 11 2층 202-1호 (청학동, 시대아파트상가)",20130801,126.6691361, 37.4214825 
신천지약국, 김포시, 경기도 김포시 하성면 애기봉로 864 (하성면), 20130805,126.6334924,37.7196392 
스타파크약국, 성남분당구, "경기도 성남시 분당구 정자일로 121 A동 7호 (정자동, 더샵스타파크)", 20130731,127.1052642, 37.3611713 
송도B1 약국, 인천연수구, "인천광역시 연수구 송도국제대로 165 지하1층 (송도동, 홈플러스 송도점)", 20151012,126.6563721, 37.3802255 
메디팜동탄약국, 화성시, 경기도 화성시 동탄순환대로20길 118 우성스타파크 B동 107호 (목동), 20190305, 127.1248249,37.1830112 
마석백제약국, 남양주시, 경기도 남양주시 화도읍 경춘로 1992 203호, 20190915,127.3093365, 37.6501433

 

 

 

파일 데이터 읽어오기

python에서 csv 파일을 읽기 위해서 먼저 csv 모듈 import 하고, 파일을 읽어야 합니다.

import csv

f = open('pharm_angelplayer.csv', 'r', encoding='utf-8') # file read
lines = csv.reader(f)

 

 

 

파일에 데이터 쓰기

파일 쓰기는 읽기 기능을 사용할 때 open()에서 'r'로 작성한 부분을 'w'로 변경해주시면 됩니다.

 

이후 .writerow() 기능을 이용하여 입력할 데이터를 작성해주시면 됩니다. 

import csv    

f = open('pharm_angelplayer.csv', 'w', encoding='utf-8', newline='') # file write
writer = csv.writer(f)

writer.writerow(["엔젤약국", "사랑시", "경기도 사랑시 고백구 행복동 88, 1004호", 20190915,127.3093365, 37.6501433])
f.close()

 

위 기능을 이용하면 csv 파일에 작성은 제대로 되지만 기존 데이터가 날아가버리는 현상이 발생합니다.

 

 

 

파일에 데이터 추가하기

csv 마지막 열에 데이터를 추가하려면 open() 방식을 'a'로 지정하시면 됩니다.

import csv    

f = open('pharm_angelplayer.csv', 'a', encoding='utf-8') # file write
writer = csv.writer(f)

writer.writerow(["엔젤약국", "사랑시", "경기도 사랑시 고백구 행복동 88, 1004호", 20190915,127.3093365, 37.6501433])
f.close()

 

 

 

파일 데이터 출력하기

전체 파일 내용은 for문을 이용하여 출력이 가능합니다. 

# 한 줄씩 읽어 출력하기
for i in lines:
    print(i)

 

 

각 줄(라인)의 일부 데이터만 추출하여 출력도 가능합니다.

# 일부 요소 출력
for i in lines:
    print(i[0]) # 약국명
    print(i[1]) # 지역
    print(i[2]) # 주소
    print(i[3]) # 개설일자
    print(i[4]) # 경도
    print(i[5]) # 위도

 

헌데 데이터 출력을 위 코드와 아래 코드 모두 한 번에 작성하신 분은 출력이 나오지 않는 경우가 발생합니다.

 

 

 

데이터  커서 위치 변경하기

csv 파일은 사용자가 작업한 위치를 커서라는 기능을 통해서 저장합니다.

 

위에서 전체 출력 코드를 사용하여 커서가 csv의 마지막에 위치하는데, 일부 데이터 추출을 위해서 코드를 실행하였기 때문에 print()를 하여도 아무것도 나타나지 않을 것입니다.

 

따라서 커서를 위치를 옮겨주어야 합니다.

 

커서 위치는 .seek()를 통해서 옮길 수 있습니다.

# 커서 위치 변경하기
f.seek(0) # 파일명.seek(위치)

 

 

 

csv 파일 데이터를 리스트에 저장하기

매번 .seek()를 통해서 커서를 옮기기 번거롭다면 csv 데이터를 리스트에 저장하여 해당 리스트를 사용하는 방법이 있습니다.

# csv 파일 내용 리스트에 저장하기
import csv

f = open('pharm_angelplayer.csv', 'r', encoding='utf-8') # file read
lines = csv.reader(f)

file_data = []
for i in lines:
    file_data.append(i)
f.close()

print(file_data)

 

 

응용 (특정 데이터 출력하기)

https://kin.naver.com/qna/detail.naver?d1id=1&dirId=10205&docId=431322298&mode=answer 

 

주피터 노트북 파이썬 문제

전혀 갈피를 못잡겠어서요 ㅜㅜ한문제만 알려주시면 응용해서 다음문제 풀어볼게요! 예제를 참고해서 사진의 문제를 코딩하면 될거같아요 ㅠㅠ 주피터 노트북에 아나콘다 이용하고 있어요!

kin.naver.com

 

# Q1. 2019년 9월에 개설한 약국의 지역, 약국명, 주소, 개설일자 출력
for i in file_data:
    if('201909' in i[3]):
        open_date = i[3][1:5] + '-' + i[3][5:7] + '-' + i[3][7:9]
        print(i[0], i[1], i[2], open_date)

 

# Q2. 전국에 개업중인 총 약국 수와 2019년 9월에 개설한 약국수 출력
pharmacy = 0
pharmacy_2019 = 0
for i in lines:
    if('201909' in i[3]):
        pharmacy += 1
        pharmacy_2019 += 1
    else:
        pharmacy += 1
print(f"전체 약국 수 : {pharmacy}")
print(f"2019년 9월 개업 약국 수 : {pharmacy_2019}")

 

 

 

Reference

https://docs.python.org/ko/3/library/csv.html

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band