Python #24 l 파이썬 날개달기_라이브러리(Library)

신승호·2021년 3월 26일
0

Python

목록 보기
25/35
post-custom-banner

List

  • 파이썬 날개달기
    • 클래스(class)
    • 모듈(module)
    • 패키지(package)
    • 예외처리(exception)
    • 내장함수
    • 라이브러리(library)
    • 연습문제

파이썬 날개달기_라이브러리(Library)


라이브러리

파이썬 라이브러리

  • 전 세계 파이썬 사용자들이 만든 유용한 프로그램을 모아 놓은 것
  • 원하는 정보를 찾아보는 곳/ 말 그대로 도서관

sys

sys 모듈

  • 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈
  • sys.argv : 명령 행에서 인수 전달하기
# argv_test.py                                       
import sys
print(sys.argv)

['/Users/shinisgood/Documents/argv_test.py']           # 파일을 일단 디렉터리에 저장하자
  • 아래 예와 같이 text.py뒤에 다른값을 넣어주면 sys.argv리스트에 그 값이 추가된다.
C:/doit/Mymod>python argv_test.py you need python         # 여기를 잘 모르겠다 하지만 
['argv_test.py', 'you', 'need', 'python']
  • python 명령어 뒤에 모든것들은 공백을 기준으로 나뉘어서 리스트의 요소로 추가된다.
  • 명령 프롬프트 창에서는 /, \든 상관 없지만, 소스코드 안에서는 \ 아니면 // 를 무조건 사용
  • sys.exit : 강제로 스크립트 종료하기
    • Ctrl+zCtrl+D 를 눌러서 대화를 종료하는 것과 같은 기능이며, 프로그램 파일 안에서 사용 시 프로그램이 중단 된다.
>>> sys.exit()                           
  • sys.path: 모듈 불러와서 사용하기
    • 파이썬 모듈들이 저장되어 있는 위치를 나타내며, 이 위치에 있는 모든 파이썬 모듈은 전부 불러올 수 있다.
>>> import sys
>>> sys.path
['/Users/shinisgood/Documents', '/Library/Frameworks/Python.framework/Versions/3.9/lib/python39.zip', '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9', '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages']
  • sys.path.append(위치) : 저장되어있는 위치를 추가해서, 그 위치에있는 모듈을 불러오기 위해
# path_append.py
import sys
sys.path.append(“/Users/shinisgood/Documents")

pickle

객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈이다.

  • pickle.dump(인수, 저장위치): pickle모듈의 dump함수를 사용하여 어떤 자료형 객체를 그대로 파일에 저장할 수 있다.
>>> import pickle
>>> f = open("test.txt", 'wb')
>>> data = {1: 'python', 2: 'you need'}		# data를 생성하고
>>> pickle.dump(data, f)			# pickle모듈과 dump함수를 가지고 test.txt 파일에 저장시킨다.
>>> f.close()
  • pickle.load(인수) : pickle.dump로 저장한 것을 다시 그 객체 상태로 불러오는 것
>>> import pickle
>>> f = open("test.txt", 'rb')
>>> data = pickle.load(f)
>>> print(data)
{2:'you need', 1:'python'}

os

환경 변수나 디렉터리, 파일등의 os 자원을 제어할 수 있게 해준다.

  • os.environ : 현재 시스템의 환경 변수값을 보여준다. (*시스템은 제각기 다른 환경 변수 값을 가지고 있다.)
>>> import os
>>> os.environ
environ({'PROGRAMFILES': 'C:\\Program Files', 'APPDATA': … 생략 …})
>>>

os.environ 은 환경 변수의 정보를 딕셔너리 객체로 돌려주기 때문에, 시스템의 PATH환경 변수내용을 따로 검색이 가능하다

>> os.environ['PATH']
'C:\\ProgramData\\Oracle\\Java\\javapath;...생략...'
  • os.chdir : 현재 디렉터리 위치를 변경할 수 있다.
>>> os.chdir("C:\WINDOWS")
  • os.getcwd : 현재 자신의 위치를 돌려준다
>>> os.getcwd()
'C:\WINDOWS'
  • os.system(명령어) : 시스템 자체의 프로그램이나 기타 명령어를 파이썬에서 호출 가능하다.
>>> os.system("dir")
  • os.popen : 시스템 명령어를 실행한 결괏값을 읽기 모드 형태의 파일 객체로 돌려준다.
>>> f = os.popen("dir")

읽어 들인 파일 객체의 내용을 보려면 아래와 같이 해라

>>print(f.read())
  • 기타 os 함수
    • os.mkdir(디렉터리) : 디렉터리 생성
    • os.rmdir(디렉터리) : 디렉터리 삭제(디렉터리가 비어있어야 된다.)
    • os.unlink(파일) : 파일 삭제
    • os.rename(x, y) : x라는 이름의 파일을 y라는 파일의 이름으로 바꾼다.

shutil

  • shutil 모듈 : 파일을 복사해 주는 모듈
  • shutil.copy(“x”, ”y”) : x라는 이름의 파일을 y로 복사한다.

    y가 디렉터리 이름이면 x라는 파일이름으로 y디렉터리에 복사하며, y디렉터리안에 x라는 파일이름이 있다면 덮어쓴다.

>>> import shutil
>>> shutil.copy("src.txt", "dst.txt")		# src.txt라는 이름의 파일을 dst.txt로 복사한다.

glob

특정 디렉터리안에 있는 파일이름 모두를 알아야 할때 사용

  • glob(디렉터리(pathname)) : 디렉터리(pathname)안에있는 파일을 리스트 형태로 돌려준다.
  • *, ?같은 문자를 써서 원하는 파일만 읽어 들일 수 있다.
***C:/doit` 디렉터리에 있는 파일 중 이름이 `mark`로 시작하는 파일을 모두 찾아서 읽어들이는 예

>>> import glob
>>> glob.glob("c:/doit/mark*")
['c:/doit\\marks1.py', 'c:/doit\\marks2.py', 'c:/doit\\marks3.py']
>>>

tempfile

파일을 임시로 만들어서 사용할 때 유용한 모듈

  • tempfile.mkstemp() : 중복되지 않은 임시 파일의 이름을 무작위로 만들어서 돌려준다.
>>> import tempfile
>>> filename = tempfile.mkstemp()
>>> filename
'C:\WINDOWS\TEMP\~-275151-0'
  • tempfile.TemporaryFile() : 임시 공간으로 사용할 파일 개체를 돌려준다.

    기본적으로 바이너리 쓰기모드(wb)를 갖고, f.close()가 호출되면 삭제된다.

>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> f.close()

time

time 모듈 은 엄청 많다. 유용한것만 한번 봅시다.

  • time.time: 현재 시간을 실수 형태로 돌려주는 함수
>>> import time
>>> time.time()
988458015.73417199
  • time.localtime’ : time.time()이 돌려준 실수 값을 년,월,일,시,분,초 의 형태로 바꿔준다
>>> time.localtime(time.time())
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=21, tm_hour=16,
    tm_min=48, tm_sec=42, tm_wday=1, tm_yday=141, tm_isdst=0)
  • time.asctime : time.localtime(time.time()) 반환된 튜플 형태의 값을 인수로받아 날짜와 시간을 알아보기 쉬운 형태로 돌려준다
>>> time.asctime(time.localtime(time.time()))
'Sat Apr 28 20:50:20 2001'
  • time.ctime : ime.asctime(time.localtime(time.time()))을 간편하게 표시할 수 있으며, ctime은 항상 현재 시간만 돌려준다.
>>> time.ctime()
'Sat Apr 28 20:56:31 2001'
  • time.strftime : 시간 관계된 것을 세밀하게 표현하는 여러가지 포멧들을 제공
time.strftime('출력할 형식 포맷 코드', time.localtime(time.time()))

시간 관계된 것을 표현하는 포멧 코드

  • %a : 요일 줄임말(ex. Mon)
  • %A : 요일 (Monday)
  • %b : 달 줄임말 (Jan)
  • %B : 달 (January)
  • %c : 날짜와 시간 출력 (20/03/22 17:34:11)
  • %d : 날, day([03,22])
  • %H: 시간(hour)-24시간 출력 형태 ([00,23])
  • %I : 시간(hour)-12시간 출력 형태 ([01,12])
  • %j : 1년 중 누적날짜 (001,366])
  • %m: 달 ([01,12])
  • %M: 분 ([01,59])
  • %p: AM or PM (AM)
  • %S: 초 ([00,59])
  • %U: 1년 중 누적 주, 일요일 시작([00,53])
  • %w:숫자로 된 요일 ([0(일요일),6])
  • %W: 1년 중 누적 주,월요일을 시작 ([00,53])
  • %x: 현재 설정된 로케일에 기반한 날짜 출력(21/03/22)
  • %X: 현재 설정된 로케일에 기반한 시간 출력(17:22:21)
  • %Y: 년도 출력(2021)
  • %Z: 시간대 출력(대한민국 표준시)
  • %%: 문자(%)
  • %y: 세기부분을 제외한 년도 출력(21)
>>> import time
>>> time.strftime('%x', time.localtime(time.time()))
'05/01/01'
>>> time.strftime('%c', time.localtime(time.time()))
'05/01/01 17:22:21'
  • time.sleep : 결괏값 출력 시 지정해둔 일정한 시간간격으로 결괏값을 출력한다 (루프안에서 많이 사용)
#sleep1.py
>> import time
>>> for i in range(10):
	print(i)
	time.sleep(1) 				# 즉 1이면 1초, 0.5면 0.5초가 되는 것이다.

	
0
1
2
3
4
5
6
7
8
9
*** 1초의 간격 천천히으로 0부터 9까지의 숫차를 출력한다.

calendar

  • calendar.calendar(연도) = calendar.prcal(연도) : 지정한 연도의 전체 달력을 볼수 있다.
>>> import calendar
>>> print(calendar.calendar(2015))
>>> calendar.prcal(2015)
  • calendar.prmonth(연도,달) : 해당 년도 내 달의 달력을 보여준다.
>>> calendar.prmonth(2015, 12)
December 2015
Mo Tu We Th Fr Sa Su
    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 31
  • calendar.weekday(연도, 월, 일) : 해당 날짜의 요일을 알려준다

     월요일은 0, 화요일은 1, 수요일은 2, 목요일은 3, 금요일은 4, 토요일은 5, 일요일은 6

>>> calendar.weekday(2015, 12, 31)
3											#	목요일이다.
  • calendar.monthrange(연도,월) : 입력 받은 달의 1일이 무슨요일인지, 달이 며칠까지 있는지를 튜플 형태로 돌려준다.
>>> calendar.monthrange(2015,12)
(1, 31)

random

  • random 모듈 난수(규칙이 없는 임의의 수)를 발생시키는 모듈

  • random.random() : 0.0에서 1.0 사이의 실수중 난수 값을 돌려준다

>>> import random
>>> random.random()
0.53840103305098674
  • random.randint(정수1, 정수2): 지정해둔 정수 사이의 난수 값을 돌려준다.
>>> random.randint(1, 10)
6
>>> random.randint(1, 55)
43
*** 랜덤 모듈 응용
# random_pop.py
import random
def random_pop(data):
    number = random.randint(0, len(data)-1)
    return data.pop(number)

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]
    while data: 
        print(random_pop(data))

결과값:
2 
3 
1 
5 
4
*** random_pop 함수는 리스트의 요소중에서 무작위로 하나 꺼낸다음 그 값을 돌려주고, 꺼낸 요소는 pop매서드에 의해 없어진다
  • random.choice() : 입력 받은 리스트 요소중에서 무작위로 하나를 선택해서 돌려준다.
def random_pop(data):
    number = random.choice(data)
    data.remove(number)
    return number
  • random.shuffle() : 입력 받은 리스트 요소를 무작위로 섞어준다.
>>> import random
>>> data = [1, 2, 3, 4, 5]
>>> random.shuffle(data)
>>> data
[5, 1, 3, 4, 2]
>>>

webbrowser

  • webbrowser 모듈 자신의 시스템에서 사용하는 기본 웹 브라우저를 실행시키는 모듈이다.

  • webbrowser.open(“URL”) : 웹브라우져를 실행 시키고 URL주소 가게해줌

>>> import webbrowser
>>> webbrowser.open("http://google.com")			#	구글 실행 시킴

이미 브라우져 켜져있다면 해당 URL로 이동한다.

  • webbrowser.open_new(“URL”) : URL을 무조건 새창으로 열리게 한다.

스레드를 다루는 threading 모듈

threading

  • 프로세스(Process) : 컴퓨터에서 동작하고 있는 프로그램
    • 1개의 프로세스는 1가지 일만 한다.
  • 스레드(thread) : 스레드 사용시 1개의 프로세스 안에서 2가지 이상의 일을 동시에 수행 할 수 있다.
# thread_test.py
import time

def long_task():  # 5초의 시간이 걸리는 함수
    for i in range(5):    # 0-4까지를 출력해야하며,
        time.sleep(1)  # 1초간 대기해야하기 때문에.
        print("working:%s\n" % i)

print("Start")

for i in range(5):  # long_task를 5회 수행한다.
    long_task()

print("End")

***long_task 함수는 수행하는 데 5초의 시간이 걸리는 함수이다.
***함수를 총 5번 반복해서 수행하는 프로그램이다. 
***이 프로그램은 5초가 5번 반복되니 총 25초의 시간이 걸린다.
****좀더 빠르게 진행이 가능하다.
# thread_test.py
import time
import threading

def long_task():
    for i in range(5):
        time.sleep(1)
        print("working:%s\n" % i)

print("Start")

threads = []
for i in range(5):
    t = threading.Thread(target=long_task)
    threads.append(t)

for t in threads:
    t.start()

for t in threads:
    t.join()  # join으로 스레드가 종료될때까지 기다린다.

print("End")
profile
신승홉니다
post-custom-banner

0개의 댓글