본문 바로가기
Programming Languages/Python

Chapter 9. 파일 입출력

by 더 이프 2023. 3. 16.
728x90

Chapter 9. 파일 입출력

 1. 파일 입출력

  ⦁ 파일 입출력은 파일을 생성하고 읽고 쓰는 것을 말함

  ⦁ 파이썬에 내장되어 있는 open() 함수를 통해 파일을 가져옴

 2. Example

 a. 부산관역시 노인복지관 현황

# file IO
# open 함수를 이용하여 데이터를 가져옴
# with 구문을 벗어나면 자동으로 close를 해줌
data_list = []
with open('부산광역시_노인복지관 현황_20230101.csv') as f:
	# 가져온 데이터를 쉼표를 기준으로 나눔
    for line in f:
        data_list.append(line.split(','))

# 첫번째 index는 column이므로 제외하고 데이터를 가져옴
data_list = data_list[1:]

# 결과값
[['중구노인복지관', '이희배', '부산광역시 중구 책방골목길3-1', '051-241-2591', '로사리오 카리타스', '사회복지법인', 'www.junggusilver.or.kr', '129.026183', '35.10414052\n'], ['중구노인복지관분관', '이희배', '부산광역시 중구 영주로 8-1', '051-462-0316', '로사리오 카리타스', '사회복지법인', 'www.junggusilver.or.kr', '129.0325002', '35.11016227\n'], ['부민노인복지관', '김문희', '부산광역시 서구 부용로 30', '051-240-3531', '불국토', '사회복지법인', 'bmsenior.bulgukto.or.kr', '129.0180414', '35.10743629\n'], ['서구노인복지관', '강동인', '부산광역시 서구 장군산로46번길21', '051-240-3541', '대한불교천태종복지재단', '사회복지법인', 'www.woorinoin.or.kr', '129.014347', '35.07312369\n'], ['동구노인종합복지관', '김채영', '부산광역시 동구 홍곡중로5번길24', '051-467-7887', '새샘복지재단', '사회복지법인', 'www.hyojason.or.kr', '129.0404219', '35.12580585\n'], ['동구분관', '김채영', '부산광역시 동구 초량남로 12', '051-714-6092', '새샘복지재단', '사회복지법인', 'www.hyojason.or.kr', '129.034846', '35.11956188\n'], ['동구자성대노인복지관', '이은숙', '부산광역시 동구 자성로140번길32', '051-632-7597', '봉생사회복지회', '사회복지법인', 'silver.bsdonggu.go.kr', '129.0648411', '35.13564405\n'], ['영도구노인복지관', '박석원', '부산광역시 영도구 절영로29번길14', '051-417-6344', '혜원', '사회복지법인', 'www.youngdosenior.or.kr', '129.0400929', '35.09133006\n'], ['영도구노인복지관분관', '박석원', '부산광역시 영도구 봉래길 372', '051-418-6300', '혜원', '사회복지법인', 'www.youngdosenior.or.kr', '129.056705', '35.09111411\n'], ['부산진구 노인장애인복지관', '한정민', '부산광역시 부산진구 전포대로300번길 6 585-1', '051-808-8090', '주는사랑복지재단', '사회복지법인', 'www.onbokji.org', '129.0658484', '35.16404711\n'], ['부산진구 노인복지관분관', '한정민', '부산광역시 부산진구 신암로135번길35', '051-714-6090', '주는사랑복지재단', '사회복지법인', 'www.onbokji.org', '129.0484094', '35.15146279\n'], ['다사랑복합문화예술회관', '박성일', '부산광역시 부산진구 대학로60', '051-891-1743', '대한불교천태종복지재단', '사회복지법인', 'www.다사랑시니어.org', '129.0344581', '35.1504381\n'], ['동래구노인복지관', '정응석', '부산광역시 동래구 명륜로207번길18', '051-554-6252', '박영학원', '학교법인', 'www.dnswc.or.kr', '129.0819668', '35.21238058\n'], ['남구노인복지관', '박시우', '부산광역시 남구 못골로 97-10', '051-628-1291', '동명문화학원', '학교법인', 'www.ngswc.or.kr', '129.093257', '35.13618392\n'], ['문현노인복지관', '변정희', '부산광역시 남구 고동골로 11', '051-938-9988', '문수복지재단', '사회복지법인', 'www.moonsubokji.or.kr', '129.070997', '35.13791\n'], ['실버벨노인복지관', '양인우', '부산광역시 북구 시랑로114번길45', '051-337-5959', '장선종합복지공동체', '사회복지법인', 'www.실버벨.kr', '129.0086824', '35.19427427\n'], ['어진샘노인종합복지관', '최윤정', '부산광역시 해운대구 재반로12번길16', '051-784-8008', '인천사회사업재단', '사회복지법인', 'www.ojin.saem.or.kr', '129.1275334', '35.17966779\n'], ['장산노인복지관', '정영욱', '부산광역시 해운대구 좌동로 126', '051-704-9141', '의안복지재단', '사회복지법인', 'www.haeundaejangsan.or.kr', '129.1787854', '35.17384305\n'], ['반여분관노인복지관', '정영욱', '부산광역시 해운대구 선수촌로207번길 79', '051-529-9141', '의안복지재단', '사회복지법인', 'banyeo.haeundaejangsan.or.kr', '129.1221252', '35.21107713\n'], ['사하사랑채복지관', '윤현주', '부산광역시 사하구 사리로 35', '051-293-9544', '호산나복지재단', '사회복지법인', 'www.sahasilver.org', '128.9987036', '35.10300921\n'], ['사하사랑채노인복지관분관', '윤현주', '부산광역시 사하구 다대로130번길34', '051-207-9544', '호산나복지재단', '사회복지법인', 'www.sahasilver.org', '128.9772442', '35.09159221\n'], ['신장림사랑채노인복지관', '김동현', '부산광역시 다대로 300번길8', '051-266-8515', '늘기쁜마을', '사회복지법인', 'www.sjrsilver.or.kr', '128.9761521', '35.0754297\n'], ['금정구노인복지관', '조수경', '부산광역시 금정구 청룡예전로 110', '051-792-7200', '범어', '사회복지법인', 'www.geumjeongsilver.kr', '129.0847903', '35.27917441\n'], ['강서구노인복지관', '윤원찬', '부산광역시 강서구 체육공원로 39', '051-972-4851', '로사리오 카리타스', '사회복지법인', 'www.gangseosenior.or.kr', '128.9734691', '35.20732663\n'], ['가덕도동노인복지관', '김익현', '부산광역시 강서구 동선길 10', '051-972-0048', '주는사랑복지재단', '사회복지법인', 'www.mjnoin.ai-sw.net', '128.8316513', '35.05664095\n'], ['명지노인종합복지관', '김익현', '부산광역시 강서구 명지국제13로 33', '051-712-7000', '주는사랑복지재단', '사회복지법인', 'www.mjnoin.ai-sw.net', '128.922964', '35.110585\n'], ['부산광역시노인종합복지관', '임종린', '부산광역시 연제구 거제천로230번길18', '051-853-1872', '대한노인회 부산광역시연합회', '사단법인', 'www.youngsilver.or.kr', '129.0821016', '35.19110671\n'], ['연제구노인복지관', '이운철', '부산광역시 연제구 고분로 188', '051-863-9988', '나온', '사회복지법인', 'www.yjsilver.kr', '129.1027986', '35.18536723\n'], ['수영구노인복지관', '이병호', '부산광역시 수영구 황령대로 489번길83', '051-759-6070', '불국토', '사회복지법인', '6070.bulgukto.or.kr', '129.1111735', '35.14004997\n'], ['광안노인복지관', '손정환', '부산광역시 수영구 장대골로 75-8', '051-715-6099', '불국토', '사회복지법인', '6099.bulgukto.or.kr', '129.1048646', '35.15956873\n'], ['사상구 노인복지관', '김익현', '부산광역시 사상구 가야대로 196번길51', '051-325-7555', '주는사랑복지재단', '사회복지법인', 'www.sasang-senior.kr', '128.9948438', '35.14725485\n'], ['사상구노인복지관 분관', '김익현', '부산광역시 사상구 모라로 91-8', '051-317-7555', '주는사랑복지재단', '사회복지법인', 'www.sasang-senior.kr', '128.9858423', '35.15976786\n'], ['기장군노인복지관', '이봉규', '부산광역시 기장군 기장읍 대청로22번길61', '051-724-3443', '기장군 도시관리공단', '공단', 'www.nosasa.or.kr', '129.2125973', '35.23509949\n'], ['기장군 노인복지관 일광 분관', '손병수', '부산광역시 기장군 일광면 이천리 930-2', '051-792-4870', '기장군 도시관리공단', '공단', 'www.nosasa.or.kr', '129.2367325', '35.26753833\n'], ['정관노인복지관', '금동숙', '부산광역시 기장군 정관읍 정관중앙로 83-14', '051-792-4920', '기장군 도시관리공단', '공단', 'www.nosasa.or.kr', '129.179083', '35.32475608\n']]
# 주소만 출력
gu_list = []
for i in data_list:
    address = i[2]
    address_list = address.split()
    gu_list.append(address_list[1])

# 오류인 다대로를 사하구로 변경
print(gu_list.index('다대로'))
gu_list[21] = '사하구'
print(gu_list)

# 결과값
21
['중구', '중구', '서구', '서구', '동구', '동구', '동구', '영도구', '영도구', '부산진구', '부산진구', '부산진구', '동래구', '남구', '남구', '북구', '해운대구', '해운대구', '해운대구', '사하구', '사하구', '사하구', '금정구', '강서구', '강서구', '강서구', '연제구', '연제구', '수영구', '수영구', '사상구', '사상구', '기장군', '기장군', '기장군']
# 동일한 주소를 하나로 표현하고, 갯수를 구함
gu_set = set(gu_list)
d_gu_list = []
d_gu_count = []
for i in gu_set:
    d_gu_list.append(i)
    d_gu_count.append(gu_list.count(i))
print(d_gu_list)
print(d_gu_count)

# 결과값
['사하구', '동구', '동래구', '연제구', '중구', '해운대구', '금정구', '사상구', '기장군', '강서구', '서구', '북구', '영도구', '수영구', '남구', '부산진구']
[3, 3, 1, 2, 2, 3, 1, 2, 3, 3, 2, 1, 2, 2, 2, 3]
# dictionary 형태로 변경
d1 = dict(zip(d_gu_list, d_gu_count))
print(d1)

# 결과값
{'사하구': 3, '동구': 3, '동래구': 1, '연제구': 2, '중구': 2, '해운대구': 3, '금정구': 1, '사상구': 2, '기장군': 3, '강서구': 3, '서구': 2, '북구': 1, '영도구': 2, '수영구': 2, '남구': 2, '부산진구': 3}
# 결과값을 크기대로 변경
def fn10(x):
    return x[1]

# rambda 방식
d1_sorted = dict(sorted(d1.items(), key = lambda x: x[1], reverse = True))
# 함수 이용
d1_sorted = dict(sorted(d1.items(), key = fn10))
print(d1_sorted)

# 결과값
[('동래구', 1), ('금정구', 1), ('북구', 1), ('연제구', 2), ('중구', 2), ('사상구', 2), ('서구', 2), ('영도구', 2), ('수영구', 2), ('남구', 2), ('사하구', 3), ('동구', 3), ('해운대구', 3), ('기장군', 3), ('강서구', 3), ('부산진구', 3)]