Python handling

Exception & File &Log Handling

Exception Handling

  • 프로그램 사용시에는 예상치못한 예외가 생김

예상이 가능한 예외

  • 발생여부를 사전에 인지하여
  • 개발자가 명시적으로 처리해주어야 함

예상이 불가능한 예외

  • 인터프리터 과정에서 일어나는 예외
  • 수행불가시 인터프리터가 자동호출

예외처리

—> Exception Handling

Try except 문법

ex) 0으로 나눌떄 exception 발생

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
try:
예외발생 코드
except <type>:
예외발생시 대처하는 코드

a = [1,2,3,4,5]
for i in range(10):
try:
print(10 / i)
print(a[i])
except ZeroDivisionError:
print("Not divided by 0")
except IndexError as e:
print(e)
else:
print('hey')
finally:
print('wow')
'''
Not divided by 0
10.0
5.0
3.3333333333333335
2.5
2.0
1.6666666666666667
1.4285714285714286
1.25
1.1111111111111112
'''

되도록이면 exception을 명확하게 잡아 가독성을 높혀라

  • else 구문을 사용할시 예외가 발생하지 않을시 실행
  • finally 예외 발생여부와 상관없게 항상 실행되는 구문을 추가

Raise 구문

  • 필요에 따라 강제로 exception을 발생
1
2
3
4
5
6
while True:
value = input("변환할 정수 값을 입력해주세요")
for digit in value:
if digit not in "0123456789":
raise ValueError("숫자값을 입력하지 않으셨습니다")
print("정수값으로 변환된 숫자 -", int(value))

Assert 구문

사전에 사용자에게 특정조건이 맞는지 조건을 넣어주고 False일때 error를 발생시켜줌

assert isinstance(decimal_number, int)

File Handling

파일의 종류

  • 기본적인 파일종류로 text file, binary file로 나뉨
  • 컴퓨터는 text file을 처리하기 위해 binary로 변환시킴

Binary file

이진법을로 나타내져 있음

메모장으로 열면 깨짐

엑셀파일 워드파일 등등

Text file

인간도 이해가능한 문자열로 이루어짐

메모장으로 열면 확인 가능

Python File I/O

1
2
3
f = open("같은 폴더의 파일", "r")

contents = f.read()

r : 읽기 모드

w : 쓰기 모드

a : 추가 모드

with 구문과 함께 사용하기

인덴테이션이 일어나는 동안에는 with줄의 코드가 다 적용이됨

인덴테이션이 종료가 되면 close가 됨

로그를 남겨야할 필요가 있음

1
2
3
4
f = open("i_have_a_dream.txt","r")
contents = f.read()
print(contents)
f.close()

Logging 모듈

print문이랑 비슷

Python data handling

  • CSV-
  • 웹(html)
  • xml
  • json

CSV(Comma Separate Value)

  • 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식이라고 생각하면 쉬움
  • TSV,SSV등으로 구분해서 만들기도 함

notepad로도 열 수 있고, 쉼표로 구분이 되어있다.

위에서 data_header라는게 있다.

여기에는 데이터의 필드가 담겨있ㅇ며 데이터 저장시 ,로 분리를 하는 코드이다

첫번째 data는 무조건 data의 필드이다 ex) data,index이런 느낌으로 카테고리이다

따라서 첫줄이라면 ,로 나누어서 data_header라는 리스트에 저장해준다

이후 줄부터는 ,로 나누어서 한줄씩 리스트에 저장해준다


  • text파일 형태로 데이터 처리시 문장내에 들어가있는 “,” 등에 대해 전처리 과정이 필요하다

  • 파이썬에서는 간단히 CSV파일을 처리하기 위해 csv객체를 제공함

1
2
import csv
reader = csv.reader(f, delimiter = ',', quotechar = '"',quoting = csv.QUOTE_ALL)
  • delimiter : 글자를 나누는 기준 (default : ‘,’ )
  • lineterminator : 중바꿈기준 (default : \r\n)
  • quotechar : 문자열을 둘러싸는 신호 문자 (default : “ )
  • quoting : 데이터를 나누는 기준이 quotechar에 의해 둘러싸인 라벨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import csv
seoung_nam_data = []
header = []
rownum = 0

with open("korea_floating_population_data.csv","r", encoding="cp949") as p_file:
csv_data = csv.reader(p_file) #csv 객체를 이용해서 csv_data 읽기
for row in csv_data: #읽어온 데이터를 한 줄씩 처리
if rownum == 0:
header = row #첫 번째 줄은 데이터 필드로 따로 저장
location = row[7]
#“행정구역”필드 데이터 추출, 한글 처리로 유니코드 데이터를 cp949로 변환
if location.find(u"성남시") != -1:
seoung_nam_data.append(row)
#”행정구역” 데이터에 성남시가 들어가 있으면 seoung_nam_data List에 추가
rownum +=1

with open("seoung_nam_floating_population_data.csv","w", encoding="utf8") as s_p_file:
writer = csv.writer(s_p_file, delimiter='\t', quotechar="'", quoting=csv.QUOTE_ALL)
# csv.writer를 사용해서 csv 파일 만들기 delimiter 필드 구분자
# quotechar는 필드 각 데이터는 묶는 문자, quoting는 묶는 범위
writer.writerow(header) #제목 필드 파일에 쓰기
for row in seoung_nam_data:
writer.writerow(row) #seoung_nam_data에 있는 정보 list에 쓰기

위는 유동인구 데이터중 성남의 데이터만을 수집하는 코드이다

window에서 관리되는 코드는 cp949이다

vscode는 utf8이기 떄문에 encoding을 바꾸어 주어햐 한다

따라서 읽을 때 cp949로 읽는다고 별도로 지정한다

encoding은 cp949,

utf8로 왠만하면 저장하기 왠만하면 작은 ‘ 이걸로 나누고

보통 csv는 다른도구를 사용하기 때문에 지금은 이거에 집착할 필요가 없다 왠만하면 pandas를 사용하기 때문에

Web

  • 데이터 송수신을 위한 HTTP 프로토콜 사용
  • 데이터 표시를 위한 HTML 형식 사용

HTML

  • HTML의 모든 요소들은 꺾쇠 괄호안에 둘러 쌓여 있음
  • 모든 HTML은 트리모양의 포함관계를 가짐

왜 HTML을 알아야 하는가?

  • HTML도 일종의 프로그램으로, 규칙을 분석하여 데이터의 추출이 가능하다

  • 추출된 데이터를 바탕으로 하여 다양한 분석이 가능

Regular Expression

  • 정규 표현식
  • 복잡한 문자열 패턴을 정의하는 문자 표현 공식
  • 특정한 규칙을 가진 문자열의 집합
  • HTML역시 tag를 사용한 일정한 형식이 존재하기 때문에 정규식으로 추출하기가 편함
  • 문법이 방대하여 그떄 그때 검색이 필요
  • 기본적인것만 일단 숙지하자

XML

  • 데이터의 구조와 의미를 설명하는 tag를 사용하여 표시하는 언어(like html)
  • XML은 컴퓨터(PC <-> 스마트폰)간의 정보를 주고받기 매우 유용한 저장방식으로 쓰이고 있음
  • 정규 표현식으로 Parsing이 가능함
  • 그러나 가장 많이 쓰이는 parser인 beautifulsoup

BeautifulSoup

  • 언어 Scraping을 위한 도구
  • 느리지만 간편하다

JSON

  • javaScript object Notation
  • 웹언어인 Java Script의 데이터 객체 표현 방식
  • 간결하다
  • 데이터 용량이 적고 Code로 전환이 쉽다
  • 따라서 XML을 대체하고 있다

Python의 DIct Type과 유사, Key:Value값으로 접근가능

Json in Python

대부분의 사이트에서 정보교환시 JSON을 사용한다

데이터 저장과 읽기는 dict type과 상호호환 가능

Author

jo-member

Posted on

2021-01-22

Updated on

2021-07-12

Licensed under

Comments