점프 투 파이썬 - 외장 함수
Language/Python

점프 투 파이썬 - 외장 함수

뉴비뉴 2019. 7. 16.

sys

sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다.

파이썬 인터프리터에 들어가면 >>> 뒤에 명령어를 타이핑하는 걸 확인할 수 있다.

sys 모듈을 변경하면 >>> 프롬프트를 변경할 수 있다.

>>> import sys
>>> sys.ps1                                  # 현재의 프롬프트는?
'>>> '
>>> sys.ps1 = '^^; '                         # 요걸로 바꿔!
^^; print 'hello'
hello
^^; 5 * 3
15
^^;

sys.exit() # 종료

# argv_test.py
import sys
print(sys.argv)

C:/doit/Mymod>python argv_test.py you need python # python 뒤의 모든 것들이 공백을 기준으로 나뉘어서
['argv_test.py', 'you', 'need', 'python'] # sys.argv 리스트의 요소가 된다.

자신이 만든 모듈 불러와 사용하기 - sys.path

sys.path는 파이썬 모듈들이 저장되어 있는 위치를 나타낸다. 즉 이 위치에 있는 파이썬 모듈은 경로에 상관없이 어디에서나 불러올 수 있다.

>>> sys.path
['', 'C:\\Users\\Family\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip', 'C:\\Users\\Fam
ily\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs', 'C:\\Users\\Family\\AppData\\Local\\Program
s\\Python\\Python37-32\\lib', 'C:\\Users\\Family\\AppData\\Local\\Programs\\Python\\Python37-32', 'C:\
\Users\\Family\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']

# ''은 현재 디렉터리르 말한다.

# path_append.py
import sys
sys.path.append("C:/doit/mymod")
sys.path # 를 타이핑하면 append로 추가한 내용이 sys.path 에 추가된 걸 확인할 수 있다.

pickle

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

다음 예는 pickle 모듈의 dump 함수를 사용하여 딕셔너리 객체인 data를 그대로 파일에 저장하는 방법을 보여준다.

>>> import pickle
>>> f = open("test.txt", 'wb')
>>> data = {1: 'python', 2: 'you need'}
>>> pickle.dump(data, f)
>>> f.close()

os

OS 모듈은 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈이다.

 

내 시스템의 환경 변수값을 알고 싶을 때 - os.environ

시스템은 제각기 다른 환경 변수 값을 가지고 있는데, os.environ은 현재 시스템의 환경 변수 값을 보여준다.

>>> import os
>>> os.environ
environ({'PROGRAMFILES': 'C:\\Program Files', 'APPDATA': … 생략 …})
# 시스템의 PATH 환경변수 내용이다.

디렉터리 위치 변경하기 - os.chdir (작업 디렉토리 변경)

os.chdir를 사용하면 다음과 같이 현재 디렉터리 위치를 변경할 수 있다.

>>> os.chdir("C:\doit\Mymod")

디렉터리 위치 돌려받기 - os.getcwd (현재 작업 디렉토리 반환)

os.getcwd는 현재 자신의 디렉터리 위치를 돌려준다.

>>> os.getcwd()

>>> os.getcwd()
'C:\\doit\\Mymod'

시스템 명령어 호출하기 - os.system

시스템 자체의 프로그램이나 기타 명령어를 파이썬에서 호출할 수도 있다.

os.system("명령어") 처럼 사용한다. 다음은 현재 디렉터리에서 시스템 명령어 dir을 실행하는 예이다.

>>> os.system("dir") # 디렉터리 내용이 출력된다.
>>> os.system("notepad") # 메모장 실행

실행한 시스템 명령어의 결괏값 돌려받기 - os.popen

os.popen은 시스템 명령어를 실행한 결괏값을 읽기 모드 형태의 파일 객체로 돌려준다.

>>> f = os.popen("dir")
>>> print(f.read())
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: E056-FC83

 C:\doit\Mymod 디렉터리

2019-07-16  오후 01:03    <DIR>          .
2019-07-16  오후 01:03    <DIR>          ..
2019-07-16  오후 12:47                27 argv_test.py
2019-07-16  오후 01:12                40 test.txt
               2개 파일                  67 바이트
               2개 디렉터리  44,148,793,344 바이트 남음

기타 유용한 os 관련 함수

shutil

shutil은 파일을 복사해주는 파이썬 모듈이다.

>>> import shutil
>>> shutil.copy("test.txt", "tttt.txt") # test.txt 라는 파일을 tttt.txt 라는 파일로 복사
'tttt.txt'

>>> os.system("dir")
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: E056-FC83

 C:\doit\Mymod 디렉터리

2019-07-16  오후 01:30    <DIR>          .
2019-07-16  오후 01:30    <DIR>          ..
2019-07-16  오후 12:47                27 argv_test.py
2019-07-16  오후 01:12                40 test.txt
2019-07-16  오후 01:30                40 tttt.txt # 추가완료
               3개 파일                 107 바이트
               2개 디렉터리  44,154,458,112 바이트 남음
0

glob

가끔 파일을 읽고 쓰는 기능이 있는 프로그램을 만들다 보면 특정 디렉터리에 있는 파일 이름 모두를 알아야 할 때가 있다. 이럴 때 사용하는 모듈이 바로 glob 이다.

 

디렉터리에 있는 파일들을 리스트로 만들기 - glob(pathname)

glob 모듈은 디렉터리 안의 파일들을 읽어서 돌려준다. *, ? 등 메타 문자를 써서 원하는 파일만 읽어 들일 수도 있다.

>>> import glob
>>> glob.glob("c:/doit/mark*")
['c:/doit\\marks1.py', 'c:/doit\\marks2.py', 'c:/doit\\marks3.py']
# doit/ 안에 있는 파일 중 이름이 mark로 시작하는 파일을 찾아서 읽어들여라

tempfile

파일을 임시로 만들어서 사용할 때 유용한 모듈이 바로 tempfile이다.

tempfile.mktemp()는 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 돌려준다.

>>> import tempfile
>>> filename = tempfile.mktemp()
>>> filename
'C:\\Users\\Family\\AppData\\Local\\Temp\\tmpoemldnec'

tempfile.TemporaryFile() 은 임시 저장 공간으로 사용할 파일 객체를 돌려준다.

이 파일은 기본적으로 바이너리 쓰기 모드(wb)를 갖는다.

f.close()가 호출되면 이 파일 객체는 자동으로 사라진다.

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

time

time.time()은 UTC를 사용하여 현재 시간을 실수 형태로 돌려주는 함수이다.

>>> import time
>>> time.time()
1563253045.6358325

time.localtime 은 time.time()이 돌려준 실수 값을 사용해서 연도, 월, 일, 시, 분 초, ... 의 형태로 바꿔준다.

>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=16, tm_hour=14, tm_min=0, tm_sec=40, 
tm_wday=1, tm_yday=197, tm_isdst=0)

time.asctime 위 time.localtime 에 의해서 반환된 튜플 형태의 값을 인수로 받아서 날짜와 시간을 알아보기 쉬운 형태로

돌려주는 함수이다.

>>> time.asctime() # 이렇게 사용하는게 더 간편하다.
'Tue Jul 16 14:02:00 2019'

>>> time.asctime(time.localtime(time.time()))
'Sat Apr 28 20:50:20 2001'

time.ctime time.asctime(time.localtime(time.time())) 은 time.ctime()을 사용해 간편하게 표시할 수 있다.

asctime과 다른 점은 ctime은 항상 현재 시간만을 돌려준다는 점이다.

>>> time.asctime() # asctime()
'Tue Jul 16 14:02:00 2019'

>>> time.ctime() # ctime()
'Tue Jul 16 14:03:33 2019'

time.strftime

time.strftime('출력할 형식 포맷 코드', time.localtime(time.time()))

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

>>> import time
>>> time.strftime('%x', time.localtime(time.time()))
'05/01/01'

>>> time.localtime() # localtime
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=16, tm_hour=14, tm_min=6, tm_sec=26, 
tm_wday=1, tm_yday=197, tm_isdst=0)

>>> time.strftime('%c', time.localtime(time.time())) # strftime
'Tue Jul 16 14:06:28 2019'

>>> time.strftime("%Y/%m/%d %H:%M:%S")
'2019/07/16 20:54:02'

time.sleep 함수는 주로 루프 안에서 많이 사용한다. 이 함수를 사용하면 일정한 시간 간격을 두고 루프를 실행할 수 있다.

#sleep1.py
import time
for i in range(10):
    print(i)
    time.sleep(1) # 1초 간격으로 실행

calendar

calendar는 파이썬에서 달력을 볼 수 있게 해주는 모듈이다.

calendar.calendar(연도)로 사용하면 그해의 전체 달력을 볼 수 있다. 결괏값은 달력이 너무 길어 생략하겠다.

>>> import calendar

>>> print(calendar.calendar(2019)) # 2019년도 전체 달력 출력
calendar.calendar(2019) == calendar.prcal(2015)

>>> print(calendar.prmonth(2019, 12)) # 2019년도 12월 달력 출력

>>> print(calendar.weekday(2019, 12, 31)) # 월요일은 0, 화요일은 1, 수요일은 2, 목요일은 3~

calendar.monthrange monthrange(연도, 월) 함수는 입력받은 달의 1일이 무슨 요일인지와 그 달이 며칠까지 있는지를

튜플 형태로 돌려준다.

>>> calendar.monthrange(2015,12)
(1, 31) # 12월 1일은 화요일이고 월(0) 화(1) 수(2) ~ 이 달은 31일 까지 있다는 것을 보여준다

random

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

>>> import random
>>> random.random()
0.53840103305098674

[!] 1~10 사이의 난수 값을 돌려준다.
>>> random.randint(1, 10)
6
>>> random.randint(1, 55)
43
>>> 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
5
4
1

위 random_pop 함수는 리스트의 요소 중에서 무작위로 하나를 선택하여 꺼낸 다음 그 값을 돌려준다.

물론 꺼낸 요소는 pop 메서드에 의해 사라진다.

리스트의 항목을 무작위로 섞고 싶을 때는 random.shuffle 함수를 사용하면 된다.

>>> import random
>>> data = [1, 2, 3, 4, 5]
>>> random.shuffle(data)
>>> data
[5, 1, 3, 4, 2]
>>>

'Language > Python' 카테고리의 다른 글

피보나치 수열  (0) 2019.07.17
점프 투 파이썬 - 프로그래밍  (0) 2019.07.17
점프 투 파이썬 - 내장 함수  (0) 2019.07.15
점프 투 파이썬 - 예외처리  (0) 2019.07.15
점프 투 파이썬 - 패키지  (0) 2019.07.15

댓글

💲 추천 글