본문 바로가기
Web & Mobile/Python

Lecture 85 - Python(6) 패키지, 내시스템정보확인, 시간, 날짜, webbrowser

by Bennyziio 2019. 7. 26.
반응형

패키지
패키지(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')

 

반응형

댓글