본문 바로가기
프로그래밍/Python & Django

[파이썬인강]3주차-모듈과 패키지, 파일 읽/쓰기 ,예외처리 및 심화문법

by Cloud_Park 2021. 11. 29.

2021.11.11 - [분류 전체보기] - IT 기업 2.4개월차 드디어 노트북 구매

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파이썬 기본 문법 환경설정 및 Python 기본(Mac)

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 2주차 - 반복문,튜플, 함수, 클래스, 상속

 

[파이썬 인강] 2주차 - 반복문,튜플, 함수, 클래스, 상속

[파이썬 인강] 2주차 2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파이썬 기본 문법 환경설정 및 Python 기본(Mac) 2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파..

base-on.tistory.com

 

3주차 입니다. 

8주가  짧다고 생각했는데 국비하니깐 엄청 길게 느껴지는건  해당 공부를 한다고 잠이 모자란게 아닐까 싶습니다.

3주차에 심화 과정과 다른 언어에서 사용 못한 내용들이 다소 있습니다. 저도 어렵다고 생각됩니다.

국비강의를 이렇게 인강으로 듣는다는게 예전과 비교하면 너무 편한 것 같습니다.

 

 

모듈과 패키지

모듈의 사용이유

프로그램 기능별로 나눠서 유지보수에 용이하게 하기 위해 사용

파이썬 기본 모듈 사용방법

import 모듈이름
모듈이름.변수
모듈이름.함수()

---
from 모듈이름 import 함수이름
함수이름()
---
import math
print(math.pi)
print(math.ceil(2.9))

 

외부 모듈을 가져와 사용하기 

예제 모듈 https://pyautogui.readthedocs.io/en/latest/

 

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

Welcome to PyAutoGUI’s documentation! PyAutoGUI lets your Python scripts control the mouse and keyboard to automate interactions with other applications. The API is designed to be simple. PyAutoGUI works on Windows, macOS, and Linux, and runs on Python 2

pyautogui.readthedocs.io

 

설치하기 

pip install pyautogui

예제 코드

import pyautogui as pg
pg.moveTo(500,500,duration=20)

*mac같은 경우 권한 제어가 필요하다.  확인 필요

결과론 마우스가 움직이는 것을 확인 할 수 있다.

 

 

모듈 직접만들어보기

version = 2.0
def printAuthor():
    print("start")

class pay:
    def __init__(self,id,price,time):
        self.id=id
        self.price=price
        self.time=time

    def print_info(self):
        return "info"

#본인 값에서 이름을 선언하면 main이라는 이름이 나오고 / 다른 파일을  선언하면  모듈이름이나온다
if __name__=="__main__":
    print("Pay module 실행")

 

 

선언하여 사용하기

import pay_module
print(pay_module.version)
pay_module.printAuthor()

#클래스 사용
pay_info=pay_module.pay("base-on",123,"1993-05-01")
print(print_info())

 

 

패키지

패키지는 관련 있는 모듈을 하나로 모아놓은 것이다.

파일을 아래와 같이 생성

각종 character, item, monster들의 내용은 

def test():
    print("파일이름")

해 놨고 

여러가지 선언 방식이 있다 .

import unit.character
unit.character.test()

from unit import item
item.test()

from unit import *
# *을 쓸때 __init__.py에 선언이 필요하다
# from . import character,item,monster

import unit
item.test()
monster.test()
character.test()

 

 

 

----

파일 입/출력

파일 형태의  데이터를 입력을 받아 처리를 하고 이를 파일로 저장을 할 수 있다 .

 

모드/ 의미

w 쓰기
a 추가
r 읽기
   

순서는 파일열기 - 작업- 파일 닫기 순으로 사용한다.

 

기본 예제

파일객체 =open("파일이름","모드")
파일객체 =write(data)
파일객체.close()

w모드는 덮어쓰기

a모드는 이어쓰기

r모드는 읽는다

객체.read()는 모든 텍스트를 읽어오고

객체.readline()은 한줄씩 읽어온다.

 

 

 

 

pickle 객체를 사용하여  읽/쓰기

형태

#쓰기
import pickle
data= {
	"하루에":"한번씩 듣기"
	"일주일에": "정리하기"
}
file=open("data.pickle","wb")
pickle.dump(data,file)
file.close()


#읽기
import pickle
file=open("data.pickle","rb")
data=pickle.load(file)
file.close()

* close() 를  안하는 실수를 범하지 않기 위해 with문이 있다.

 

with open("file_name","r") as file:
	data=file.read()

file변수를 선언하는데  with ,as문을 사용했다.

 

*주의) 혹여다 파일 path가 맞지 않다고 나오게 된다. ./의 위치는 프로젝트 파일이고 루트 기준으로 파일을 찾으면된다.)

 

csv 파일 형식 읽기/쓰기

csv 파일은 엑셀형식을 말한다.  엑셀은 가로 세로가 있는 표인데 이를  2중리스트로 표현하여  읽고 쓰게 된다.

#쓰기
import csv
data=[
	["name","age","address"],
	["base-on",30,"경기도"]
]
file= open("info.csv","w",newline="",encoding="utf-8-sig")
writer=svc.writer(file)
for info in data:
	writer.writerow(info)
file.close()
===
#읽기
import csv
opne("info.csv","r",encoding="utf-8-sig")
reader=csv.reader(file)
for data in reader:
	print(data)
file.close()

```

 

 

 

 

 

---

예외 처리

에러 상황에 대해 처리하고  이를 어떻게 나타내는지 정의 할 수 있다.

예외처리를 직접 생성하여  해당 상황을 이르킨다.

try:
 예외 발생할 수 있는코드
except:
 예외시 처리 





---
다른방법
try:
	예외가 일어나는 코드
except:
  발생 시 실행할 코드
else:
  발생하지 않았을 때 넣는 코드 
finally:
  항상 실행할 코드

 

흔히 일어나는 예외 유형

1. ValueError : 타입이 다를때

2. ZeroDivisionError: 나누기가 0이면 발생함

 

예외 처리 예제

a=input(" a>>")
b=input(" b>>")
try:
 print( int(a)/int(b) )
except ValueError as e:
	print("문자열 예외 ",e)
except ZeroDivisionError as e:
  print("나누기는 0이 될 수 없다",e)
else:
	print("정상적으로 계산")
finally:
	print("끝")

 

 

예외 만들기

#1. 에러호출(rasie)
raise Exeption("에러 메시지")

#2.만들기
class baseonError(Exceotion):
	def __init__(self):
		super().__init__("my Error")

 

 

 

 

 

----

파이썬 문법 심화

문자열 심화 함수들

아래의 문자열관련 함수들을 통해 손쉽게 변경가능한 부분이 많으니 꼭 암기해서 사용해보시길 바랍니다.

1. 소대문자 함수
"문자열".upper()
"문자열".lower()

2.문자열 바꾸기
"문자열1 문자열2".replace("문자열1","문자열2")

3.문자열 포함여부
"문자열".find("검색단어")/결과는 인텍스번호로 알려준다. 없으면 -1

4.문자열 수 카운팅
"문자열".count("카운트문자")

5.문자열 분리
"문자열".split()/기본은 공백 / 구분자를 넣으면 구분자 기준으로 잘라준다.

6.문자열 연결
"구분자".join(["문자열1","문자열2","문자열3"])

7.공백 삭제하기
"   문자열   ".lstrip() /왼쪽공백 지우기
"   문자열   ".rstrip() /오른쪽 공백 지우기
"   문자열   ".strip() / 양쪽 공백 지우기

문자열 포메팅

기존에 더하기+ 연산을 통해 문자열을 연결해야한다. 하지만 포메티을 통해 손쉽게 문자열을 연결해보도록하자

'{숫자}'.format("숫자에 들어갈 문자")
'base {0} {1} {2}'.format("-on.","tistory.","com")

 

f-string방식

name1="-on"
name2="tistory"
name3="com"
f'base {name1}{name2}{name3)'

 

리스트 심화

리스트 추가하는 방법
append() 함수 ,([리스트가 들어가도됨])
삭제
pop() 가장 끝값을 출력 -> 삭제
pop(1) 1번 인덱스를 삭제
remove("리스트데이터") 해당 데이터 삭제

값의 인덱스 구하기
index("값")

특정값의 갯수 확인
count("값")

모든요소 삭제
clear()

정렬하기
sort()

**enumerate 반복문을 사용할때 인덱스와같이 출력하는 방법
for index, number in enumerate(리스트)
	print(index , number)

 

리스트 내포

for, if문을 사용하여 간편하게 리스트를 만들기

1~5까지 리스트 선언
num=[i for i in range(5)]

---
리스트들을 2배로
nums=[1,2,3,4]
ex_num[ i*2 for i in nums]

---
if문 사용
num=[ i for i in range(10) if i %2 ==0 ]
해석 순서  for -> if ->표현식 -> 리스트

예제1 앞자리가 a인 문자열만 리스트에 저장
a=[i for i in word if i[0]=='a'] 

예제2 리스트에 none이 있으면 공백해서 넣는다 if else문이면  for보다 앞에 온다.
a=[i if i i != None else '' for i in items]

 

할당과 복사

만약

x=[1,2,3,4,5]

y=x

 

라고 햇을때

x의 주소값도 y도 가지게 되어 서로 같게된다 .

고로 복사를 하려 했지만 같은 주소값을 가지게 되어 값의 복사는 안됐다.

#주소값을 확인하는 방법
id(a)
id(b)

 

y=x.copy()

만약 다차원 복사일 경우

import copy
a=[[a],[b,v,d]]
y=copy.deepcopy(a)

 

 

---

매개 변수 심화 과정

매개변수는 함수 뒤에 들어오는 인자 값을 정의 할 수 있는데 이를 정의 하는 여러 가지 방법이 있다.

함수를 정의할 때 참고 될만하니 꼭 알아 보시길 바랍니다.

다양한 변수( *args ,***kwargs)

-위치 매개변수 : 기본적인 매개변수, 호출때 순서대로 쓰이고 다른 매개변수와 쓰일때 항상 앞에 쓴다.

-기본 매개변수 : 매개 변수의 기본 값을 정할 수 있다.

 

def 함수(name,age=11):
	print(name)
	parint(age)
---
호출
함수("base-on")

-키워드 매개변수 : 호출시 키워드를 넣는다, 순서가 상관없다

정의
---
def 함수(name,age):
		print(name,age)
---
호출
함수(name="base-on",age=30)

가변 매개변수

함수의 변수에 개수가 정해지지 않은 매개 변수를 칭하며 튜플형태로 받아온다.

매개변수 앞에 *을 넣어준다

def 함수(*args):
	for x in args:
		print(args)

키워드 매개변수

개수가 정해지지 않은 매개변수(딕셔너리 형태) , 앞에**를 넣는다.

def 함수(**kwagrg):
	for k,v in kwarg.items():
		print(f.'{k}: {v}')

---
호출
함수(name="base-on",age=30)

팁) 매개변수 작성하는 순서

위치- 기본 -위치 가변- 키워드(기본)- 키워드 가변변수

 

def 함수(*item,name,value):
	print (item)
	print(name)
	print(value)

함수("a","b","c","d","e","f")
라고 했을 때 item에 a,b,c,d가 들어가고  name에 e, valuse에 f가 들어갈꺼라고 생각하지만 전부 item이 가져간다
해결 하는방법
1 *item을 뒤로 보내 순서를 조정
2 호출시 name="e", value="f"라고 지정을 해준다.

 

람다함수

이름이 필요없는 간단한 함수 , 모든 함수의 인자로 넣을 수 있다.

코드가 간결해지고, 메모리가 절약된다는 장점이 있다.

lambda 매개변수:결과

---
lambda a:a-1  -> a를 받아 -1시켜준다.

---
호출
(lambda a:a-1)(10)
lamb=lambda a:a-1
lamb(10) -> 9호출  이름을 지정한 예제 

---
기본 함수 변경해보기
def yes_or_no(a):
	if a>0:
		return True
	else:
		return False


---
변경
lambda a:True if a>0 else False

 

map함수

기존의 리스트를 수정해서 새로운 리스트를 만들 때 사용한다.

언선
#map(함수,순서가 있는 자료형)
print(list(map(int,['1','2','3'])))

---
예제
item =[" 1  ","  2  ","  3  ","  4  "]
def strip_all(x):
	return x.strip()
item=list(map(strip_all,item))
print(item)


---
람다 함수 사용하여 만들어 보기 
item= list(map(lambda x:x.strip(),item))

 

filter함수

리스트에서 조건을 만족하는 값만 뽑고 싶을 때 사용

#filter (함수,순서가 있는 자료형) -> 결과 값을 리스트로 만든다.
def func(x):
	return x<0
print(list(filter(func,[-1,-4,4,2,-9,9,11])))

 

 

 

  함수에 대해 익숙해지는 시간을 가졌는데, 람다라는 식이 처음에 생소하고 map,filter에 함수이름을 넣는다는 것이 가장 신기했던거 같습니다. 시간이 소요 될 것을 예상되고 이를 활용하여 코딩으로 녹여봐야 겠습니다. 이렇게 3주차가 끝나고 8추자의 반인 4주차에 돌입할 예정입니다. 파이썬의 내용은 다음 주차에서 끝나 파이썬을 마무리하고 완벽하게 정리하여 업로드 하겠습니다.