본문 바로가기

환경, 에너지

[EMS] Python 예외처리, 클래스와 모듈, 정규식

강사님 강의 자료

https://github.com/kmsclass/ems 

 

GitHub - kmsclass/ems

Contribute to kmsclass/ems development by creating an account on GitHub.

github.com

 


예외처리

1. tyr ~ except : try문 수행 중 오류가 발생하면 except 구문 실행된다.

 

2. 다중예외처리

 

3.else : 예외 발생없이 정상적인 경우 실행되는 영역

 

4. raise : 강제로 예외 발생. 강제 발생 후 except로 넘어간다

 

5. pass : 예약어. 오류 발생시 무시하고, 어떤 구문도 실행되지 않도록 함. 거의 모든 구문에서 사용 가능

 

 

 

 

 

클래스와 모듈

  •  클래스 
    • 사용자 정의 자료형 
    • 추후 자료를 넣기위한 빵틀
    • 틀에 맞춰 입력된 자료(=객체, 빵)에 메모리를 할당해줌
    • 객체끼리 섞이지않는다
  • 모듈
    • 기능의 모음
    • 응집도는 높이고 결합도는 낮춰라

 1 . class

  • 기본생성자
__init__(self) : 생성자를 구현하지 않으면 자동으로 제공되는 생성자
pass  

 

  • self :  : 자기참조변수 : 자신객체의 멤버를 표현시 사용되는 예약어
  • 소멸자 : 생성된 객체들이 제거됨 
class Car : # 내가 만든 정보, 메모리 잡아먹지않음. 빵틀일뿐
    color =''
    speed = 0
    def upSpeed(self, value) :
        self.speed += value
    def downspeed(self, value) :
        self.speed -= value
car1 = Car()  # 객체화. Car(): 생성자, 멤버변수의 초기화, 객체 생성시 반드시 호출됨
car1.color = '빨강'
car1.speed = 10

car2 = Car()  # 객체화
car2.color = '파랑'
car2.speed = 20
car2.upSpeed(30)

print('자동차1의 색상: ',car1.color,'현재속도: ',car1.speed)
print('자동차2의 색상: ',car2.color,'현재속도: ',car2.speed)

#결과
자동차1의 색상:  빨강 현재속도:  10
자동차2의 색상:  파랑 현재속도:  50

 

 

 

# 기본 생성자 : 클래스 내에 생성자가 없는 경우 시스템이 만들어주는 생성자
# 생성자 : __init__
class Car : 
    color = ''
    speed = 0
    count = 0

    # self : 자기참조변수, 현재 속한 객체(카1인지 카2인지), 
    def __init__(self,v1,v2) :  #생성자, 객체생성에 관여하는 메서드
        self.color = v1  # color : 인스턴스 변수 (객체변수)
        self.speed = v2  # speed : 인스턴스 변수 (객체변수)
        Car.count += 1   # count : 클래스 변수, 객체들의 공유 변수 (클래스명.변수명), 객체에 속하지 않음

    def upSpeed(self,value) : 
        self.speed += value

    def downSpeed(self,value) : 
        self.speed -= value
myCar1 = Car('빨강',10) # V1,V2에 해당하는 arguments(매개변수) 입력
print('자동차1의 색상: ',car1.color,'현재속도: ',car1.speed,'자동차 생산 갯수: ', Car.count)
myCar2 = Car('파랑',20)
print('자동차1의 색상: ',car1.color,'현재속도: ',car1.speed,'자동차 생산 갯수: ', Car.count)
print('자동차2의 색상: ',car2.color,'현재속도: ',car2.speed,'자동차 생산 갯수: ', Car.count)

#결과
자동차1의 색상:  빨강 현재속도:  10 자동차 생산 갯수:  1
자동차1의 색상:  빨강 현재속도:  10 자동차 생산 갯수:  2
자동차2의 색상:  파랑 현재속도:  50 자동차 생산 갯수:  2

 

 

  • class 상속
class Car : 
    speed = 0
    door = 3
    def upSpeed(self,value) :
        self.speed += value
        print('현재 속도(부모클래스): %d' %self.speed)

class Sedan(Car) : #상속. 자손calss명(부모calss명), 부모클래스 기능 모두 사용 가능
    pass
sedan1 = Sedan()
sedan1.speed = 10
sedan1.upSpeed(50)
print('sedan1: ',sedan1.speed,',',sedan1.door)

sedan2 = Sedan()
sedan2.speed = 20
sedan2.door = 4
print('sedan2: ',sedan2.speed,',',sedan2.door)

#결과
현재 속도(부모클래스): 60
sedan1:  60 , 3
sedan2:  20 , 4

 

 

  • calss에서 사용되는 특별한 메서드
생성자 __init__(self, ...)
소멸자 __del__(self)
문자열로 변경 __repr__(self)
+ __add__(self,other)
- __sub__(self,other)
< __lt__(self,other)
> __gt__(self,other)
== __eq__(self,other)

 

 

  • 추상 메서드 :  오버라이딩을 반드시 해야하는 메서드, 자료를 표준화할 때 사용
  • 오버라이딩 
    • 부모calss의 함수를 자손calss에서 재정의 하는 기능
    • 부모calss에서 정의된 함수를 자손calss에서 같은 이름, 다른 기능을 가진 함수로 재정의
    • 상속받아야 가능하다
class SuperClass : 
    def method(self) : #추상메서드
        raise NotImplemented # 강제 예외 발생
    
class SubClass1(SuperClass): #자손클래스
    # pass
    def method(self) : # 부모클래스와 같은 이름의 함수를 다른 기능으로 재정의
        print('SubClasss1에서 오버라이딩한 메서드')
sub1 = SubClass1()
sub1.method()

#결과
SubClasss1에서 오버라이딩한 메서드

 

2. 모듈

# 모듈 가져오기
import mod00 # import 
print(mod00.add(10,20))
print(mod00.add(30,20))

# from ~ import 사용하기
from mod00 import add
print(add(10,20))
# sub함수는 가져오지 않았기 때문에 사용시 오류남

# 모듈에서 함수 가져오기
from mod00 import add, sub
print(add(10,20))
print(sub(30,20))

# 간단한 별칭 지정
import mod00 as m 
print(m.add(10,20))
print(m.add(30,20))
import math
import sys
print(sys.builtin_module_names)
print(dir(__builtins__)) # dir() : 사용가능한 (제공된) 기능들 조회
print(dir(math))
print(dir(mod00))

 


정규식

  • 주어진 데이터에서 내가 정한 패턴을 찾아 숫자든 문자든 바꿔서 사용 가능
  • 패턴을 정규식으로 짠다.
  • 문자타입의 숫자도 /d를 사용해 패턴으로 찾기 가능
  • sql의 like 확장 버전같은 느낌

정규식에서 사용되는 기호

1. () : 그룹
2. \g<n> : n번째 그룹
3. [] : 문자 1개
   [a] : a문자
   [a-z] 소문자 1개
   [A-Z] : 대문자 1개
   [A-Za-z] : 영문자 1개
   [A-Za-z]* : 영문자 0개 이상
   [A-Za-z]+ : 영문자 1개 이상
   [0-9A-Za-z] : 영문자 or 숫자 1개
   [0-9] : 숫자 1개. \d 와 같음
4. {n} : 글자의 갯수
   ca{2}t
   cat : false
   caat : True
   {n,m} : 글자의 갯수 n개 이상 m개 이하
5. ? : 0 또는 1
   * : 0개 이상
   + : 1개 이상
6. \s : 공백
   \s* : 공백 0개 이상
   \s+ : 공백 1개 이상

 

# 문제. 점수의 총점과 평균 출력하기
str4 = 'hong:90,lee:80,kim:75,park:50,song:100'

p = re.compile(r'\d{2,3}')  # 정규식으로 패턴 지정
scores = re.findall(p, str4) # 데이터에서 패턴 찾기
print(scores)

scores = list(map(int,scores))  # 연산을 위해 숫자 리스트로 변환
print(sum(scores))
print(sum(scores)/len(scores))


# 대소문자 구분없이 re.I
# pattern = re.compile('Th*e', re.I)

 

 

 

 

 

 

 

 


파일

1. 파일 선택

open (파일이름, 파일모드, 인코딩방식)

파일 모드

  • r : 읽기모드
  • w : 쓰기모드, 파일이 존재하지 않는 경우 생성 .파일이 존재하는 경우 내용이 변경 됨
  • a : 쓰기모드, append 모드. 파일이 존재하지 않는 경우 생성. 파일이 존재하는 경우 내용이 추가 됨
  • t : 텍스트 모드. 기본형
  • b : 이진 모드

3일동안 파이썬 기초 휘몰아쳤다

분석할 때 필요한 내용만 들을줄알았는데 생각보다 더 많이 알려주셔서 좋기도 하고 ... 좋다..

예외처리 강의 못들어서 아쉬운 마음

 

오늘 배운 내용 어떻게 다시 공부하면 좋을지 안떠오르므로

코드깜지 쓰기.. 영타 500 나와라

'환경, 에너지' 카테고리의 다른 글

[EMS] matplotlib, folium  (0) 2024.07.08
[EMS] Pandas 기본  (0) 2024.07.03
[EMS] Python 기초  (0) 2024.07.02
[EMS] ESS 이해와 사례분석  (0) 2024.06.28
[EMS] EMS 현장설계 및 제어프로그램  (0) 2024.06.27