so woon!

python_13일차 본문

Python/개념정리

python_13일차

xowoony 2022. 8. 17. 21:37
## CSV 파일 입출력 ##
# csv 파일 읽기 #
student_list = []    # 최종 결과를 담을 빈 리스트를 만든다.
with open('학생명단.csv', 'rt') as file:
    file.readline()    # (제목 줄['학번~연락처'] ->지워진다.) 변수에 안담음. 그대로 날라감.
    while True:
        line = file.readline()   # 한줄씩 읽어서 line 리스트에 담는다.
        if not line:    # 더이상 라인이 없을 때까지 반복
            break
        student = line.split(',')   # , 로 구분된 것을 분리하여 student에 담는다.
        student_list.append(student)    #결과 리스트에 분리한 student 내용을 담는다.

print(student_list)   #결과출력
============실행결과===============
[['10101', '김승별', '서울시 영등포구', '010-1111-1111\n'], ['10102', '박나라', '서울시 여의도구', '010-2222-2222\n'], ['10103', '최태욱', '서울시 강남구', '010-3333-3333\n'], ['10104', '민기홍', '인천시 계양구', '010-4444-4444\n'], ['10105', '이명숙', '경기도 과천시', '010-5555-5555\n']]











## 247page)
member_list = []
with open('회원명단.csv', 'rt') as file:
    file.readline()   #제목줄을 삭제함.
    while True:
        line = file.readline()
        if not line:
            break
        member = line.split(',')   # , 로 구분된 것을 분리하여 member에 담는다.
        member[0] = member[0].strip('"')   #0번째 강나라 이름에 있는"를 제거
        member_list.append(member)

print(member_list)
============실행결과===============
[['강나라', '필라테스', '25일\n'], ['나유라', '수영', '25일\n'], ['이상기', '헬스', '15일\n']]












## csv 모듈로 CSV 파일 생성하기 ##
import csv  # scv 파일을 쉽게 관리하기 위한 모듈을 불러온다.

with open('차량관리.csv', 'w', newline='') as file:
    csv_maker = csv.writer(file, delimiter=',') # 쓰기 객체 생성
                                    # delimiter는 ,로 나누어지게 만들것이다는 뜻
    csv_maker.writerow([1, '08러1234', '2020-10-20, 14:00'])
    csv_maker.writerow([2, '025다1234', '2020-10-20, 14:10'])
    csv_maker.writerow([3, '28하1234', '2020-10-20, 14:20'])

print('차량관리.csv 파일이 생성되었습니다.')
============실행결과===============
차량관리.csv 파일이 생성되었습니다.








## csv 모듈로 CSV 파일 읽기 ##

import csv

with open('차량관리.csv', 'r', newline='') as file:
    csv_reader = csv.reader(file, delimiter=',', quotechar='"')    #읽기 객체 생성
    for line in csv_reader:
        print(line)
============실행결과===============
['1', '08러1234', '2020-10-20, 14:00']
['2', '025다1234', '2020-10-20, 14:10']
['3', '28하1234', '2020-10-20, 14:20']








## JSON 파일 입출력 ##
# JSON 파일 쓰기 (생성) #
import json
dict_list = [
    {
        'name':'james',
        'age':20,
        'spec':[175.5, 70.5]
    },
    {
        'name':'alice',
        'age':21,
        'spec':[168.5, 60.5]
    }
]
json_string = json.dumps(dict_list)    #json 으로 인코딩 #json string에 담음  #언어를 변환

with open('dictList.json', 'w') as file:
    file.write(json_string)    #json 으로 인코딩한 내용을 json파일에 쓴다.

print('dictList.json 파일이 생성되었습니다.')
============실행결과===============
dictList.json 파일이 생성되었습니다











## JSON 파일 읽기 ##
import json

with open('dictList.json', 'r') as file:
    json_reader = file.read()  #파일 전체 읽어 jason_reader에 저장   #아직 제이슨임 파이썬이 아님
    dict_list = json.loads(json_reader)   #loads를 써서 파이썬화 시킴

print(dict_list)

for dic in dict_list:
    print('이름 : {}'.format(dic['name'])) #name에 해당하는 값
    print('나이 : {}'.format(dic['age']))
    print('키 : {}'.format(dic['spec'][0]))
    print('몸무게 : {}'.format(dic['spec'][1]))
    print()
============실행결과===============
[{'name': 'james', 'age': 20, 'spec': [175.5, 70.5]}, {'name': 'alice', 'age': 21, 'spec': [168.5, 60.5]}]
이름 : james
나이 : 20
키 : 175.5
몸무게 : 70.5

이름 : alice
나이 : 21
키 : 168.5
몸무게 : 60.5







### 예외 처리 ###
## 예외 종류 ##
# SyntaxError : 잘못된 문법
    print('test)
    print('Hello'))

# NameError : 참조 변수 없음
    a = 10
    b = 15
    print(c)

# ZeroDivisionError : 0 나누기 에러

    print(10 / 0)

# IndexError : 인덱스 범위 오버
    x = [1, 2, 3]
    print(x[4])

# KeyError : 잘못된 key
    dic = {'name':'홍길동', 'age':20}
    print(dic['hobby'])   #에러
    print(dic.get('hobby'))   #에러 안나고 None을 반환

# ValueError : 참조 값이 없을 때
    x = [1, 5, 9]
    x.remove(100)    #값 100을 지워라.

# TypeError : 자료형에 맞지 않는 연산을 수행할 경우
    x = [1, 2]   #리스트
    y = (1, 2)    # 튜플
    z = 'Hello'   #문자열
    print(x + y + z)    #서로 다른 자료형이기 때문에 성립 안됨

## 모든 예외를 처리하는 방식 (try ~ except) ##
try:
    num = int(input('정수를 입력하세요 : '))  # 예외가 발생할 가능성이 있는 코드
    print('원의 반지름 :', num)
    print('원의 둘레 :', num * 3.14 * 2)
    print('원의 넓이 :', num * num * 3.14)
except:  # 예외 발생시
    print('정수를 입력하지 않았습니다!')  # 정수를 입력하지 않으면 에러가 뜨지 않고 메시지 출력
============실행결과===============
정수를 입력하세요 : a
정수를 입력하지 않았습니다!







## 297page)
try:
    height = input('키를 입력하세요 >>> ')  # 문자열 형태로 입력받음
    height = round(height)  # 반올림(예외 발생)
    print('입력하신 키는 {}cm로 처리됩니다.'.format(height))
except:
    print('예외가 발생했습니다.')
============실행결과===============
키를 입력하세요 >>> 154.3
예외가 발생했습니다.










## 특정 예외만 처리하는 방식 ##
try:
    a = int(input('제수를 입력하세요 : '))
    b = int(input('피제수를 입력하세요 : '))
    print('{} / {} = {}'.format(a, b, a/b))
except ZeroDivisionError:
    print('0으로 나눌 수 없습니다.')
except ValueError:
    print('정수만 입력할 수 있습니다.')
except Exception:  #예외의 엄마 #모든 예외의 기본   #예상치 못한 예외들 처리
    print('알 수 없는 예외가 발생했습니다.')
============실행결과===============
제수를 입력하세요 : 3
피제수를 입력하세요 : 0
0으로 나눌 수 없습니다.







## 예외 메세지 처리하기 ##
a = [10, 20, 30, 40, 50]
try:
    print(a[10])  # 5개 있고 4번까지밖에 없음
except IndexError as e:  # e라고 부르겠다
    print(e)  # 예외 메세지 출력
============실행결과===============
list index out of range





## else 문과 finally 문 ##
    else : 예외 발생하지 않고 정상적으로 처리될 때 실행되는 구문
    finally : 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문
                예외 발생 여부와 관계없이 무조건 실행해야 할 경우에 사용
    try 는 단독으로는 사용할 수 없으며,
    반드시 except 또는 finally 와 함께 사용해야 함
    else 는 반드시 except 뒤에 사용해야 함








## ex)
try:
    num = int(input('정수를 입력하세요 : '))
except:
    print('정수를 입력하지 않았습니다.')
else:
    print('원의 반지름 :', num) # 예외가 발생하지 않았을 때 실행(정상적으로 작동)
    print('원의 둘레 :', num * 3.14 * 2)
    print('원의 넓이 :, num * num * 3.14')
finally:
    print('일단 프로그램이 끝이 났습니다!')
============실행결과===============
정수를 입력하세요 : 가
정수를 입력하지 않았습니다.
일단 프로그램이 끝이 났습니다!

'Python > 개념정리' 카테고리의 다른 글

python_15일차  (1) 2022.08.24
python_14일차  (0) 2022.08.22
python_12일차  (0) 2022.08.12
python_11일차  (0) 2022.08.10
python_10일차  (0) 2022.08.10
Comments