패키지
패키지(Packages)는 도트(.)를 이용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다. 예를 들어 모듈명이 A.B인 경우 A는 패키지명이 되고 B는 A 패키지의 B 모듈이 된다.
패키지 안에 모듈이 있는 개념인건가...
패키지 만들기
패키지 기본 구성 요소 준비하기
__init__.py만들기
__init__.py만들기
__init__.py만들기
echo.py 만들기
render.py 만들기
echo.py
def echo_test():
print('echo')
render.py
def render_test():
print('render')
패키지 안의 함수 실행하기
Ex04.ex01
#1
# import game.graphic.render
# import game.sound.echo
# game.graphic.render.render_test()
# game.sound.echo.echo_test()
#2
# from game.sound import echo
#
# echo.echo_test()
from game.sound.echo import echo_test
echo_test()
__init__.py의 용도
시스템이 제공하는 패키지
사용자가 만든 패키지 위치(=site-packages)
__all__의 용도
Ex04.ex02
from game.sound import *
echo.echo_test()
__init__.py
__all__ = ['echo']
__init__에 위와 같이 추가하고 실행하면 아래와 같이 기존에 출력이 안되었던게 정상 출력된다.
Ex04.ex02
from game.sound import *
echo.echo_test()
위와 같이 __all__이 문법으로 추가되어 있음을 알 수 있다
기존 package만든걸 지우고 site-package안에 넣어서 해보자
기존 패키지 game을 복사해서 위 경로상 site-packages안에 붙여 넣는다
from game.sound import *
echo.echo_test()
위와 같이 정상 동작함을 확인할 수 있다.
프로젝트 생성 시 패키지를 만들면서 들어가보자
game.graphic
game.sound
render.py
def render_test():
print('render')
echo.py
def echo_test():
print('echo')
Ex04.ex01
#1
# import game.graphic.render
# import game.sound.echo
# game.graphic.render.render_test()
# game.sound.echo.echo_test()
#2
# from game.sound import echo
#
# echo.echo_test()
#3
from game.sound.echo import echo_test
echo_test()
외장함수
이제 파이썬 프로그래밍 능력을 높여 줄 더 큰 날개를 달아 보자. 전 세계의 파이썬 사용자들이 만든 유용한 프로그램들을 모아 놓은 것이 바로 파이썬 라이브러리이다. "라이브러리"는 "도서관"이라는 뜻 그대로 원하는 정보를 찾아보는 곳이다. 모든 라이브러리를 다 알 필요는 없고 어떤 일을 할 때 어떤 라이브러리를 사용해야 한다는 정도만 알면 된다. 그러기 위해 어떤 라이브러리들이 존재하고 어떻게 사용되는지 알아야 할 필요가 있다. 자주 사용되고 꼭 알아두면 좋은 라이브러리들을 중심으로 하나씩 살펴보자.
sys
명령 행에서 인수 전달하기 - sys.argv
강제로 스크립트 종료하기 - sys.exit
자신이 만든 모듈 불러와 사용하기 - sys.path
pickle
자바의 개체 직렬화(Serialization)같은 개념이다
Ex05.ex01 = InputStream
import pickle
f = open('text.txt', 'wb')
data = {1: 'python', 2: 'you need'}
pickle.dump(data, f)
print('저장 완료')
f.close()
Ex05.ex02 = OutputStream
import pickle
f = open('text.txt', 'rb')
data = pickle.load(f)
print(data)
os
내 시스템의 환경 변수값을 알고 싶을 때 - os.environ
import os
print(os.environ)
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\kitcoop\\AppData\\Roaming', 'CATALINA_HOME': 'C:\\jQuery\\apache-tomcat-8.5.32', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'KITCOOP-PC', 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'FP_NO_HOST_CHECK': 'NO', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\kitcoop', 'IDE_PROJECT_ROOTS': 'C:\\Python\\eclipse-workspace\\Ex05', 'JAVA_HOME': 'C:\\Program Files\\Java\\jre-10.0.2', 'LOCALAPPDATA': 'C:\\Users\\kitcoop\\AppData\\Local', 'LOGONSERVER': '\\\\KITCOOP-PC', 'NUMBER_OF_PROCESSORS': '4', 'OS': 'Windows_NT', 'PATH': 'C:/Program Files/Java/jre1.8.0_181/bin/server;C:/Program Files/Java/jre1.8.0_181/bin;C:/Program Files/Java/jre1.8.0_181/lib/amd64;c:\\app\\oracle\\product\\12.1.0\\dbhome_1\\bin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\2.0\\bin\\x86;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\2.0\\bin\\x64;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\2.0\\bin\\x86;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\2.0\\bin\\x64;C:\\Program Files\\Microsoft VS Code\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\PuTTY\\;C:\\Python\\Python36\\Scripts\\;C:\\Python\\Python36\\;C:\\Users\\kitcoop\\AppData\\Local\\Programs\\Python\\Launcher\\;C:\\Program Files\\Microsoft VS Code\\bin;C:\\Program Files\\Bandizip\\;C:\\Users\\kitcoop\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Python\\eclipse;', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 58 Stepping 9, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '3a09', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PROMPT': '$P$G', 'PSMODULEPATH': 'C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\', 'PUBLIC': 'C:\\Users\\Public', 'PYDEV_COMPLETER_PYTHONPATH': 'C:\\Python\\eclipse\\plugins\\org.python.pydev.core_6.5.0.201809011628\\pysrc', 'PYDEV_CONSOLE_ENCODING': 'UTF-8', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'C:\\Python\\eclipse\\plugins\\org.python.pydev.core_6.5.0.201809011628\\pysrc\\pydev_sitecustomize;C:\\Python\\eclipse-workspace\\Ex05;C:\\Python\\Python36\\DLLs;C:\\Python\\Python36\\lib;C:\\Python\\Python36;C:\\Python\\Python36\\lib\\site-packages', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows', 'TEMP': 'C:\\Users\\kitcoop\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\kitcoop\\AppData\\Local\\Temp', 'USERDOMAIN': 'kitcoop-PC', 'USERNAME': 'kitcoop', 'USERPROFILE': 'C:\\Users\\kitcoop', 'WINDIR': 'C:\\Windows', 'WINDOWS_TRACING_FLAGS': '3', 'WINDOWS_TRACING_LOGFILE': 'C:\\BVTBin\\Tests\\installpackage\\csilogfile.log'})
import os
# print(os.environ)
print(os.environ['PATH'])
C:/Program Files/Java/jre1.8.0_181/bin/server;C:/Program Files/Java/jre1.8.0_181/bin;C:/Program Files/Java/jre1.8.0_181/lib/amd64;c:\app\oracle\product\12.1.0\dbhome_1\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;C:\Python\Python36\Scripts\;C:\Python\Python36\;C:\Users\kitcoop\AppData\Local\Programs\Python\Launcher\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Bandizip\;C:\Users\kitcoop\AppData\Local\Programs\Microsoft VS Code\bin;C:\Python\eclipse;
내컴퓨터 - 속성 - 환경변수에서 PATH에 잡아준 설정들을 확인할 수 있다.
이는 즉 수정도 가능할 것이란 얘기다.
디렉터리 위치 변경하기 - os.chdir
import os
# print(os.environ)
# print(os.environ['PATH'])
print(os.getcwd())
os.chdir('c:\jQuery')
print(os.getcwd())
디렉터리 위치 리턴받기 - os.getcwd
import os
# print(os.environ)
# print(os.environ['PATH'])
print(os.getcwd())
시스템 명령어 호출하기 - os.system = 자바에선 ProcessBuilder
import os
# print(os.environ)
# print(os.environ['PATH'])
print(os.getcwd())
print(os.system('dir'))
os.chdir('c:\jQuery')
print(os.getcwd())
import os
# print(os.environ)
# print(os.environ['PATH'])
print(os.getcwd())
print(os.system('dir'))
os.chdir('c:\jQuery')
print(os.getcwd())
print(os.system('dir'))
실행한 시스템 명령어의 결과값 리턴받기 - os.popen
기타 유용한 os 관련 함수
shutil
파일 복사하기 - shutill.copy(src, dst)
glob
디렉터리에 있는 파일들을 리스트로 만들기 - glob(pathname)
import glob
print(glob.glob('c:/Python/*'))
['c:/Python\\eclipse', 'c:/Python\\eclipse-jee-photon-R-win32-x86_64.zip', 'c:/Python\\eclipse-workspace', 'c:/Python\\module', 'c:/Python\\package', 'c:/Python\\Python36']
import glob
# print(glob.glob('c:/Python/*'))
for file in glob.glob('c:/Python/*') :
print(file)
tempfile
import tempfile
filename = tempfile.mktemp()
print(filename)
C:\Users\kitcoop\AppData\Local\Temp\tmp9scyk90i
time
시간과 관련된 time 모듈에는 유용한 함수가 굉장히 많다. 그중에서 가장 유용한 몇 가지만 알아보자.
time.time - 초단위로 나옴
>>> import time
>>> time.time()
1537152042.160459
time.localtime
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=17, tm_hour=11, tm_min=40, tm_sec=53, tm_wday=0, tm_yday=260, tm_isdst=0)
time.asctime - 알아보기 쉬운 형태로 리턴
>>> time.asctime()
'Mon Sep 17 11:41:56 2018'
time.ctime - 현재 시간만 리턴
>>> time.ctime()
'Mon Sep 17 11:42:34 2018'
time.strftime - string format time
시간에 관계된 것을 표현하는 포맷 코드
>>> time.strftime('%x', time.localtime(time.time()))
'09/17/18'
>>> time.strftime('%c', time.localtime(time.time()))
'Mon Sep 17 11:45:06 2018'
time.sleep
import time
for i in range(10):
print(i)
time.sleep(1)
위 예는 1초 간격으로 0부터 9까지의 숫자를 출력한다. 위 예에서 볼 수 있듯이 time.sleep 함수의 인수는 실수 형태를 쓸 수 있다. 즉, 1이면 1초, 0.5면 0.5초가 되는 것이다.
calendar
import calendar
print(calendar.calendar(2018))
import calendar
# print(calendar.calendar(2018))
print(calendar.prmonth(2018, 12))
calendar.weekday
import calendar
# print(calendar.calendar(2018))
# print(calendar.prmonth(2018, 12))
print(calendar.weekday(2018, 12, 31))
calendar.monthrange
import calendar
# print(calendar.calendar(2018))
# print(calendar.prmonth(2018, 12))
# print(calendar.weekday(2018, 12, 31))
print(calendar.monthrange(2018, 12))
random
import random
print(random.random())
print(random.randint(1, 10))
print(random.randint(1, 55))
random 모듈을 이용해서 재미있는 함수를 하나 만들어 보자
import random
# print(random.random())
# print(random.randint(1, 10))
# print(random.randint(1, 55))
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))
위의 random_pop 함수는 리스트의 요소 중에서 무작위로 하나를 선택하여 꺼낸 다음 그 값을 리턴한다. 물론 꺼내진 요소는 pop 메서드에 의해 사라진다.
import random
# print(random.random())
# print(random.randint(1, 10))
# print(random.randint(1, 55))
# 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))
def random_pop(data):
number = random.choice(data)
data.remove(number)
return number
data = [1,2,3,4,5]
random.shuffle(data)
print(data)
random.choice 함수는 입력으로 받은 리스트에서 무작위로 하나를 선택하여 리턴한다.
리스트의 항목을 무작위로 섞고 싶을 때는 random.shuffle 함수를 이용하면 된다.
[1, 2, 3, 4, 5]라는 리스트가 shuffle 함수에 의해 섞여서 [5, 1, 3, 4, 2]로 변한 것을 확인할 수 있다.
webbrowser
import webbrowser
webbrowser.open('http://google.com')
webbrowser의 open 함수는 웹 브라우저가 이미 실행된 상태이면 입력 주소로 이동한다. 만약 웹 브라우저가 실행되지 않은 상태이면 새로 웹 브라우저를 실행한 후 해당 주소로 이동한다.
open_new 함수는 이미 웹 브라우저가 실행된 상태이더라도 새로운 창으로 해당 주소가 열리도록 한다.
import webbrowser
# webbrowser.open('http://google.com')
webbrowser.open_new('https://www.naver.com')
'Web & Mobile > Python' 카테고리의 다른 글
Lecture 88 - Python(8) 파이썬을 이용한 우편번호 검색기, nCloud에 python 3 설치 (0) | 2019.08.01 |
---|---|
Lecture 86 - Python(7) 파이썬에 데이터베이스 연결 (0) | 2019.07.30 |
Lecture 84 - Python(5) 클래스와 객체, 모듈 (0) | 2019.07.25 |
Lecture 83 - Python(4) 사용자 입력과 출력, 주민번호유효검사, 파일읽고쓰기, 내장함수 (0) | 2019.07.24 |
Lecture 82 - Python(3) 제어문, 조건문, 비교문, if, else, while, for, continue, range, 함수의 구조, 매개변수와 인수, kwargs, return, lambda (0) | 2019.07.23 |
댓글