2011. 11. 26. 21:04

[ 날짜시간 모듈에 관련 클래스 ]

 

[ 클래스 ]

[ 내용 ]

class datetime.date

일반적으로 사용되는 그레고리안 달력의 년,월,일을 나타냄

class datetime.time

시간을 시,분,초,마이크로 초,시간대로 나타냅니다.

class datetime.datetime

date클래스와 time클래스의 조합으로

년,월,일,시,분,초,마이크로 초, 시간대 정보를 나타냅니다.

class datetime.timedelta

두 날짜 혹은 시간 사이의 기간을 표현합니다.

 

 

[ date 클래스 ]

 

datetime.date(year, month, day)

일반적으로 사용되는 년, 월, 일로 표기되는 현재 그레고리안 달력의 날짜를 표현합니다.

숫자로 년, 월, 일을 입력 받아서 date 객체를 생성합니다.

만약 입력된 인자가 아래의 조건을 따르지 않는 경우, ValueError가 발생합니다.

Ÿ datetime.MINYEAR(1) <= year <= datetime.MAXYEAR(9999)

Ÿ 1 <= month <= 12

Ÿ 1 <= day <= 해당 월의 날짜

┗[ date 객체를 반환하는 클래스 메서드 ]┓

클래스 메서드

내용

date.fromtimestamp(timestamp)

타임스탬프 값을 인자로 받아서 date 객체를 반환

date.fromordinal(ordinal)

1년1월1일 이후로 누적된 날짜로부터 date 객체를 반환

date.today()

현재 시스템의 오늘 날짜 date 객체를 반환

┗┓

xample - date 클래스 생성자와 클래스 메서드의 사용 예:

 

[ date 객체 속성 ]

속성

내용

date.year

년(읽기 전용)

date.month

월(읽기 전용)

date.day

일(읽기 전용)

date.max

date 객체의 최대값(9999년 12월 31일)

date.min

date 객체의 최소값(1년 1월 1일)

xample - 각 속성에 대한 예:

 

[ date 객체를 이용하여 다른 값/형식으로 변환하는 메서드 ]

메서드

내용

date.replace(year, month, day)

입력된 인자로 변경된 date 객체를 반환.

원본 객체는 변경되지 않습니다.

date.timetuple()

date 객체의 값을 time.struct_time 시퀀스 객체에 할당.

해당되는 정보가 없는 시,분,초는 '0'으로 초기화 됩니다.

date.toordinal()

1년1월1일 이후로 date객체까지 누적된 날짜를 반환

date.weekday()

요일을 정수로 변환하여 반환 (예:월요일=0, 일요일=6)

(: date(2011, 12, 24).weekday() == 5 )

date.isoweekday()

date.weekday()와 동일하나 월요일=1 ~ 일요일=7로 나타냄.

(: date(2011, 12, 24).isoweekday() == 6 )

xample - 변환 메서드 사용 예:

# date.replace()메서드 호출시, 변경하려는 속성만 명시적으로 전달 변경

 

# date 객체의 값을 바탕으로 다른 형태의 객체를 반환하는 예

 

[ 그 외 date 객체의 출력 형태를 변경하는 메서드 ]

메서드

내용

date.isoformat()

date 객체의 정보를 'YYYY-MM-DD' 형태의 문자열로 반환

date.ctime()

date 객체의 정보를 'Sun Mar 15 00:00:00 2009' 형태의 문자열로

반환합니다. 시,분,초에 대한 정보는 '0'으로 초기화 됩니다.

date.strftime(format)

지정된 포맷에 맞춰 date 객체의 정보를 문자열로 반환합니다.

xample - 출력 형태 변경 메서드 예:

 

 

 

[ time 클래스 ]

 

class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]])

time 클래스는 시, 분, 초와 같은 시간을 표현 합니다.

숫자로 시, 분, 초 마이크로 초, 시간대 정보(Time Zone)를 입력 받아서 time 객체를 생성.

만약 입력된 인자가 아래의 조건을 따르지 않는 경우, ValueError가 발생합니다.

Ÿ 0 <= hour < 24

Ÿ 0 <= minute < 60

Ÿ 0 <= second < 60

Ÿ 0 <= microsecond < 1000000

xample - time 객체 생성 예:

 

[ time 객체 속성 ]

속성

내용

time.hour

시(0~23, 읽기 전용)

time.minute

분(0~59, 읽기 전용)

time.second

초(0~59, 읽기 전용)

time.microsecond

마이크로초(0~999999, 읽기 전용)

time.min

time 객체가 표현할 수 있는 최소값을 나타냅니다.

(time(0, 0, 0, 0))

time.max

time 객체가 표현할 수 있는 최대값을 나타냅니다.

(time(23, 59, 59, 999999))

 

[ time 클래스 지원 메서드 ]

메서드

내용

time.replace([hour[, minute[

, second[, microsecond[, tzinfo]]]]])

입력된 값으로 수정된 time 객체를 반환.

원본 객체는 변경되지 않습니다.

time.isoformat()

time 객체의 값을 'HH:MM:SS.mmmmmm' 형식이나

'HH:MM:SS' 형식(마이크로초가 없는 경우)의문자열을 반환

time.strftime(format)

지정된 포맷에 맞춰 time 객체의 정보를 문자열로 반환.

xample :

 

 

 

[ datetime 클래스 ]

 

class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])

datetime 클래스는 date 클래스와 time 클래스의 조합으로 이루어져 있습니다.

숫자로 각 인자를 받아서 datetime 객체를 생성하며, 년, 월, 일은 생략이 불가능 합니다.

명시적으로 인자를 지정하여 입력할 수 있으며, 생략된 인자는 '0'으로 초기화 됩니다.

만약 입력된 인자가 아래의 조건을 따르지 않는 경우, ValueError가 발생합니다.

Ÿ MINYEAR(1) <= year <= MAXYEAR(9999)

Ÿ 1 <= month <= 12

Ÿ 1 <= day <= 주어진 년도 그리고 달의 날자 개수

Ÿ 0 <= hour < 24

Ÿ 0 <= minute < 60

Ÿ 0 <= second < 60

Ÿ 0 <= microsecond < 1000000

┗[ datetime 객체를 반환하는 메서드 ]┓

메서드

내용

datetime.today()

현재 지방 기준의 datetime 객체를 생성합니다.

datetime.now([tz])

현재 지방 기준의 datetime 객체를 생성합니다.

(시간대 정보가 특별히 입력되지 않으면

플랫폼의 시간대를 그대로 사용합니다)

datetime.utcnow()

UTC 기준의 DATETIME 객체를 생성합니다.

datetime.fromtimestamp(

timestamp[, tz])

타임스탬프를 지방 기준의 DATETIME 객체를 생성합니다.

datetime.

utcfromtimestamp(timestamp)

타임스탬프를 UTC 기준의 DATETIME 객체를 생성합니다.

datetime.fromordinal(ordinal)

1년 1월 1일 이후로 누적된 날짜로부터 datetime 객체를

생성. 시간 관련된 값은 '0'으로 할당 됩니다.

datetime.combine(date, time)

date 객체와 time 객체를 입력받아서 datetime 객체를 생성

datetime.strptime(date_string,

format)

시간을 표현한 사용자가 정의한 형식 문자열을

datetime 객체를 생성합니다.

xample - datetime 객체 생성 예:

 

# datetime 객체를 반환하는 메서드 사용 예:

 

[ datetime 객체 속성 ]

속성

내용

datetime.year

년(읽기 전용)

datetime.month

월(읽기 전용)

datetime.day

일(읽기 전용)

datetime.hour

시(0~23, 읽기 전용)

datetime.minute

분(0~59, 읽기 전용)

datetime.second

초(0~59, 읽기 전용)

datetime.microsecond

마이크로초(0~999999, 읽기 전용)

datetime.min

datetime 객체가 표현할 수 있는 최소값.

(datetime(1, 1, 1))

datetime.max

datetime 객체가 표현할 수 있는 최대값.

((9999, 12, 31, 23, 59, 59, 999999))

 

[ datetime 클래스를 다른 형식으로 변환하는 메서드 ]

메서드

내용

datetime.date()

원본 객체의 년,월,일 정보를 가지고 있는 date 객체 반환

datetime.time()

원본 객체의 시,분,초,마이크로초를 가지고 있는 time 객체 반환

datetime.replace()

입력된 값으로 변경된 datetime 객체를 반환

datetime.timetuple()

datetime 객체의 값을 time.struct_time 형식의 시퀀스 객체로

변환하여 반환.

xample :

 

[ datetime 클래스의 출력과 관련된 메서드 ]

메서드

내용

datetime.weekday()

각 요일을 숫자로 나타냄 (월요일=0 ~ 일요일=6)

(time.struct_time.tm_wday 참조)

datetime.isoweekday()

ISO 형식에 맞도록 각 요일을 숫자로 나타냄.

(월요일=1 ~ 일요일=7)

datetime.isocalendar()

ISO 형식에 맞는 날짜 표현

(ISO year, ISO week number, ISO weekday)을 튜플로 반환.

datetime.isoformat()

datetime 객체를 'YYYY-MM-DDTHH:MM:SS.mmmmmm' 형식

이나 'YYYY-MM-DDTHH:MM:SS'(마이크로초가 0인 경우) 형식

으로 변환하여 문자열로 반환합니다.

datetime.ctime()

datetime 객체를 'Thu Mar 26 18:53:03 2009' 형식의

문자열을 반환

datetime.strftime(format)

입력된 포맷 형식에 맞추어 datetime 객체를 문자열로 반환

xample :

 

 

 

[ timedelta 클래스 ]

 

class datetime.timedelta([days[, seconds[, microseconds[,

milliseconds[, minutes[, hours[, weeks]]]]]]])

새롭게 시작하는 연인들에게 가장 중요한 것이 100일, 1000일과 같은 기념일을 챙기는 것입니다.

이러한 시간, 날짜의 연산을 위하여 파이썬에서는 timedelta 클래스를 사용할 수 있습니다.

timedelta 클래스는 두 날짜 혹은 시간 사이의 기간을 표현 합니다.

 

생성되는 timedelta 객체의 값을 확인해보면 생성자에 전달된 값과 다른 것을 확인할 수 있습니다.

그 이유는 동일한 기간을 표현하는 방식이 다양하게 표현(1weeks와 7days는 동일)될 수 있기

때문에, 입력된 값을 가지고 timedelta 객체에서 정규화 과정을 거쳐 유일한 표현 방식으로

변경하기 때문입니다.

 

[ 정규화 결과 timedelta 객체에 저장되는 값 ]

Ÿ 0 <= microseconds < 1000000

Ÿ 0 <= seconds < 3600*24 (초로 표현할 수 있는 최대값은 하루입니다)

Ÿ -999999999 <= days <= 999999999

xample : timedelta 클래스의 생성 예:

# 표현할 수 있는 가장 작은 값.

 

[ 시간, 날짜의 연산 ]

이제 연인들을 위한 100일, 1000일 계산하는 방법에 대해서 알아보겠습니다.

100일이 너무 길다면, 100 마이크로초, 500초 등도 계산이 가능하니 여러모로 활용이 가능합니다.

두 날짜, 시간 사이의 기간은 timedelta 클래스로 표현하는 방법을 앞에서 설명 드렸습니다.

이렇게 생성된 timedelta 객체를 이용하여 아래의 연산을 수행할 수 있습니다.

연산 결과로는 모두 timedelta 객체가 반환 됩니다.

 

Ÿ timedelta_3 = timedelta_1 + timedelta_2

Ÿ timedelta_3 = timedelta_1 - timedelta_2

Ÿ timedelta_2 = timedelta_1 * int = int * timedelta_1

Ÿ timedelta_2 = timedelta_1 // int

Ÿ abs(timedelta)

 

생성된 timedelta 객체를 이용하여 date, datetime 객체를 변경할 수 있습니다.

지원하는 연산은 아래와 같으며, 각 객체 간의 비교연산도 가능합니다.

Ÿ date_2 = date_1 + timedelta

Ÿ date_2 = date_1 - timedelta

Ÿ timedelta = date_2 - date_1

Ÿ datetime_2 = datetime_1 + timedelta

Ÿ datetime_2 = datetime_1 - timedelta

Ÿ timedelta = datetime_1 - datetime_2

xample - timedelta의 연산을 수행하는 예:

# 그 외 비교 연산

xample - date 객체와 관련된 연산의 예:

xample - datetime 객체와 관련된 연산의 예:

 

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

ftplib(FTP protocol client) 모듈  (0) 2011.12.08
파이썬 – 시간(time) 모듈  (1) 2011.11.26
파이썬 – os 모듈  (2) 2011.11.22
파이썬 – sys 모듈  (0) 2011.11.21
파이썬 – os.glob 모듈  (0) 2011.11.20
Posted by devanix
2011. 11. 26. 21:04

[ 컴퓨터 시간 표현 ]

 

[ 용어 ]

[ 내용 ]

타임스탬프

(TimeStamp)

컴퓨터에서 시간을 측정하는 방법으로 1970년 1월1일 자정

(epoch)이후로 초 단위로 측정한 절대시간 입니다.

협정세계시

(UTC, Universal Time Coordinated)

1972부터 시행된 국제 표준시

(세슘 원자의 진동수에 의거한 초의 길이가 기준이 됩니다)

그리니치 평균시

(GMT, Greenwich Mean Time)

런던 그리니치 천문대의 자오선상에서의 평균 태양시 (1972년

부터 협정세계시를 사용하지만, 동일한 표현으로 널리 쓰임)

지방표준시

(LST, Local Standard Time)

UTC를 기준으로 경도 15도마다 1시간 차이가 발생하는 시간

(한국은 동경 135도를 기준으로 UTC보다 9시간 빠름)

일광절약 시간제

(DST, Daylight Saving Time)

흔히 서머타임으로 알고 있는 것으로, 에너지 절약을 목적

으로 시간을 한 시간씩 앞당기거나 뒤로 미루는 제도.

 

[ struct_time 시퀀스 객체 ]

 

[ 속성 ]

[ 내용 ]

tm_year

년도(예: 1982, 1999, 2009)

tm_mon

월(1~12)

tm_mday

일(1~31)

tm_hour

시(0~23)

tm_min

분(0~59)

tm_sec

초(0~61)

tm_wday

각 요일을 숫자로 나타냅니다. (월요일은 '0' 입니다)

tm_yday

1월 1일부터 오늘까지 누적된 날짜를 반환 (1~366)

tm_isdst

일광절약 시간제(서머타임)를 나타냅니다 (0, 1, -1)

 

[ time 모듈 함수 ]

 

[ 함수 ]

[ 내용 ]

time.time()

1970년 1월 1일 자정 이후로 누적된 초를 float 단위로 반환

time.sleep(secs)

현재 동작 중인프로세스를 주어진 초만큼 정지

time.gmtime([secs])

입력된 초를 변환하여, UTC기준의 struct_time 시퀀스 객체로 반환

(인자가 입력되지 않은 경우, time()을 이용하여 현재 시간을 변환)

time.localtime([secs])

입력된 초를 변환하여, 지방표준시 기준의 struct_time 시퀀스

객체를 반환 (인자가 입력되지 않은 경우, time()을 이용하여 현재

시간을 변환)

time.asctime([t])

struct_time 시퀀스 객체를 인자로 받아서

'Sun Mar 15 18:49:28:2009'와 같은 형태로 반환

time.mktime(t)

지방표준시인 struct_time 시퀀스 객체를 인자로 받아서 time()과

같은 누적된 초를 반환

time.strftime(format,[, t])

struct_time 객체를 사용자가 정의한 형식으로 변경하여

문자열로 반환

time.strptime(string[, format])

사용자가 정의한 형식 문자열을 struct_time 객체로 변환

 

[ 형식 지정자 ]

 

[ 지시자 ]

[ 내용 ]

%y

연도를 축약하여 표시

%Y

연도를 축약하지 않고 표시

%b

축약된 월 이름

%B

축약되지 않은 월 이름

%m

숫자로 표현한 월(01~12)

%d

일(01~31)

%H

24시를 기준으로 한 시(00~23)

%I

12시를 기준으로 한 시(01~12)

%M

분(00~59)

%S

초(00~61)

%p

오전(AM) / 오후(PM)을 표시

%a

축약된 요일 이름

%A

축약되지 않은 요일 이름

%w

요일을 숫자로 표시(예: 일요일(0))

%j

1월 1일부터 누적된 날짜(001~366)

 

 

[ Example ]

time 모듈의 함수 사용

 

▶ 10초가 sleep하는 예제

[실행결과]

 

▶ strftime() - 날짜의 출력 형식 지정

 

▶ strptime() - 지정된 형식 문자열 형태로 표현된 시간을 struct_time 객체로 변환

 

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

ftplib(FTP protocol client) 모듈  (0) 2011.12.08
파이썬 – 날짜시간(datetime) 모듈  (0) 2011.11.26
파이썬 – os 모듈  (2) 2011.11.22
파이썬 – sys 모듈  (0) 2011.11.21
파이썬 – os.glob 모듈  (0) 2011.11.20
Posted by devanix
2011. 11. 22. 18:43

운영체제(OS)에서 제공되는 기본적인 기능들을 제공.

 

os.getcwd(), os.chdir(path)

 

chdir() 함수는 현재 작업 디렉터리 위치를 변경하며,

getcwd()함수는 현재 작업 디렉터리의 위치를 가져올 때 쓰입니다.

>>> getcwd()

'C:\\Python3'

>>> chdir('Tools')

>>> getcwd()

'C:\\Python3\\Tools'

 

os.access(path, mode)

 

입력받은 <path>에 대해서 <mode>에 해당하는 작업이 가능한지의 여부를 반환합니다.

 

모드(mode)

설명

F_OK

해당 path의 존재 여부를 확인

R_OK

해당 path의 읽기 가능여부 확인

W_OK

해당 path의 쓰기 가능여부 확인

X_OK

해당 path의 실행 가능여부 확인

 

>>> access('.', F_OK)    # existence

True

>>> access('.', W_OK | X_OK | R_OK) # write, exec, read

True

 

os.listdir(path)

 

해당 경로(path)에 존재하는 파일과 디렉터리들의 리스트를 반환합니다.

>>> listdir('.')

['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe',

'README.txt', 'tcl', 'Tools', 'w9xpopen.exe']

 

os.mkdir(path[, mode])

 

<path>에 해당하는 디렉터리를 생성합니다.

>>> mkdir('test1')

['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe',

'README.txt', 'tcl', 'test1', 'Tools', 'w9xpopen.exe']

 

os.makedirs(path[, mode])

 

인자로 전달된 디렉터리를 재귀적으로 생성합니다.

이미 디렉터리가 생성되어 있는 경우나 권한이 없어 생성할 수 없는 경우는 예외를 발생합니다.

>>> makedirs('test2/sub1/sub2/leaf')

>>> listdir('test2/sub1/sub2')

['leaf']

>>> makedirs('test2/sub1/sub2/leaf') # 이미 존재하는 디렉터리를 생성하는 경우 예외 발생

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module>

makedirs('test2/sub1/sub2/leaf')

File "C:\Dev\Python3\lib\os.py", line 152, in makedirs

mkdir(name, mode)

WindowsError: [Error 183] 파일이 이미 있으므로 만들 수 없습니다: 'test2/sub1/sub2/sub3'

 

os.remove(path), os.unlink(path)

 

파일을 삭제 합니다.

>>> remove('test.txt')

>>> unilnk('test.txt')

 

os.rmdir(path)

 

디렉터리를 삭제합니다. 단, 디렉터리는 비어있어야만 합니다.

>>> mkdir('test1')

 

os.removedirs(path)

 

디렉터리를 연달아 삭제합니다.

 

만약 '윈도우 탐색기'와 같은 애플리케이션으로 'sub1' 디렉터리를 보고 있다면,

removedirs() 함수로 'sub1' 디렉터리를 삭제할 수 없습니다. 탐색기를 종료하고 수행해야 합니다.

# leaf 디렉토리 삭제에 성공하면 차례로 sub2, sub1, test2의 순서로 삭제

>>> removedirs('test2/sub1/sub2/leaf')

 

os.rename(src, dst)

 

srcdst로 이름을 변경하거나 이동합니다. 파일이나 디렉터리에 대해서 모두 적용 됩니다.

>>> rename('text.txt', 'renamed.txt')

 

os.renames(src, dst)

 

srcdst로 이름을 변경하거나 이동합니다. rename과 다른점은 이동 시에 필요한 디렉터리들을

자동으로 생성한다는 것입니다.

>>> renames('renamed.txt', 'test_renames/moved.txt')

>>> listdir('test_renames')

['moved.txt']

 

os.stat(path)

 

경로에 해당하는 정보를 얻어옵니다.

아래의 예제와 같이 순차적으로 protection, inode, device, link, user id, group id, size,

last access time, last modified time, last change time 등을 나타냅니다.

(stat() 함수 결과 중 일부는 유닉스/리눅스 시스템에만 해당되는 것도 있습니다)

>>> stat('python.exe')

nt.stat_result(st_mode=33279, st_ino=281474976762468, st_dev=0, st_nlink=1, st_uid=0,

st_gid=0, st_size=26624, st_atime=1321851747, st_mtime=1315097496, st_ctime=1315097496)

 

os.utime(path, times)

 

경로에 해당하는 파일에 대해 액세스 시간(access time)과 수정 시간(modified time)을 <times>로

수정합니다. <times>가 None일 경우는 현재 시간으로 수정합니다. (유닉스의 touch 명령어와 유사)

>>> stat('readme.txt')

nt.stat_result(st_mode=33206, st_ino=281474976762465, st_dev=0, st_nlink=1, st_uid=0,

st_gid=0, st_size=6788, st_atime=1321797957, st_mtime=1315094610, st_ctime=1315094610)

>>> utime('readme.txt', None)

>>> stat('readme.txt')

nt.stat_result(st_mode=33206, st_ino=281474976762465, st_dev=0, st_nlink=1, st_uid=0,

st_gid=0, st_size=6788, st_atime=1321950244, st_mtime=1321950244, st_ctime=1315094610)

 

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

 

top으로 지정된 디렉터리를 순회하며 경로, 디렉터리명을 순차적으로 반환합니다.

# 다음의 구조로 test_walk, a, b 디렉터리를 만들어 놓고 walk를 실행

 

>>> for path,dirs,files in walk('test_walk'):

    print(path, dirs, files)

    

test_walk ['a', 'b'] []

test_walk\a [] []

test_walk\b [] ['readme.txt']

 

# topdown이 False로 설정된 경우에는 다음과 같이 디렉터리의 끝에서부터 위로 탐색

>>> for path,dirs,files in walk('test_walk', topdown=False):

    print(path, dirs, files)

    

test_walk\a [] []

test_walk\b [] ['readme.txt']

test_walk ['a', 'b'] []

 

os.umask(mask)

 

umask를 설정합니다. 수행하면 이전 mask 값이 반환됩니다. umask가 수행되면

이후 오픈 되는 파일이나 디렉터리에 (mode & ~umask)와 같이 적용됩니다.

 

os.pipe()

 

파이프를 생성합니다. 함수를 실행하면 읽기, 쓰기 전용 파이프의 파일 디스크립터가 반환됩니다.

 

(※ 파이프(pipe)란 프로세스 간 통신을 위한 공유 영역입니다. 여러 프로세스 간에 정보를 주고 받기

위해 만들어지는 공간이며, 하나의 프로세스가 정보를 쓰면 다른 프로세스에서 읽을 수 있습니다)

>>> pipe()

(3, 4)

 

os.fdopen(fd[, mode[, bufsize]])

 

파일 디스크립터를 이용해 파일 객체를 생성합니다.

 

(※ fdopen은 'from os import *'로 import가 안됩니다.

fdopen의 경우 'from os import fdopen'으로 따로 import 해주어야 합니다)

>>> from os import *

>>> from os import fdopen

 

>>> r,w = pipe()

>>> rd = fdopen(r)

>>> rd

<_io.TextIOWrapper name=3 mode='r' encoding='cp949'>

 

os.popen(command[, mode[, bufsize]])

 

인자로 전달된 command를 수행하며 파이프를 엽니다.

(파이썬3 에서는 Popen 클래스의 사용을 권장하지만 그대로 사용할 수도 있습니다)

 

(※ popen은 'from os import *'로 import가 안됩니다. popen의 경우 'from os import popen'으로

import하거나 import os 후 os.popen으로 사용해야 합니다)

>>> from os import popen

 

>>> p = popen('dir', 'r')

>>> p.read()

...<중략>...

2011-09-04 오전 09:51 26,624 python.exe\n

2011-09-04 오전 09:51 27,136 pythonw.exe\n

2011-11-22 오후 05:24 6,788 README.txt\n

2011-11-20 오후 11:06 <DIR> tcl\n

2011-11-20 오후 11:05 <DIR> Tools\n

2011-09-04 오전 09:51 49,664 w9xpopen.exe\n

6개 파일 396,879 바이트\n

9개 디렉터리 72,007,368,704 바이트 남음\n'

 

os.name

 

파이썬이 실행되는 운영체제의 이름을 나타냅니다. (ex: 'nt', 'posix', 'mac'등...)

>>> name

'nt'

 

os.environ

 

환경변수들을 나타내는 사전입니다.

>>> environ

environ({'TMP': 'C:\\DOCUME~1\\ADMINI~1\\LOCALS~1\\Temp',

'COMPUTERNAME': 'WIN2003', 'USERDOMAIN': 'WIN2003',

'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', ...<중략>...})

>>> environ['OS']

'Windows_NT'

>>> environ['userprofile']

'C:\\Documents and Settings\\Administrator'

 

os.getpid()

 

현재 프로세스 아이디를 반환합니다.

>>> getpid()

3380

 

os.getenv(varname[, value])

 

환경 변수의 값을 얻어 옵니다. 다만 해당 환경 변수가 없을 경우에는 인자로 전달된 <value>값을

반환합니다. value가 생략되고 해당 환경 변수가 없으면 None을 반환 합니다.

>>> getenv('homepath')

'\\Documents and Settings\\Administrator'

>>> getenv('test', '')

''

 

os.putenv(varname, value)

 

환경변수 <varname>을 <value>로 설정합니다. 자식 프로세스에게 영향을 미칩니다.

>>> putenv('test', '\\tmp\\test')

 

# 자식 프로세스에게 영향을 미치므로, putenv()의 결과 확인.

>>> from os import popen

>>> p = popen('''python -c "import os; print(os.getenv('test'))"''', 'r')

>>> p.read()

'\\tmp\\test\n'

 

os.strerror(code)

 

에러 코드에 해당하는 에러 메시지를 보여줍니다.

>>> for i in range(0, 44):

print (i, strerror(i))

 

0 No error

1 Operation not permitted

2 No such file or directory

3 No such process

4 Interrupted function call

5 Input/output error

6 No such device or address

7 Arg list too long

8 Exec format error

9 Bad file descriptor

10 No child processes

...<중략>...

 

os.system(command)

 

<command>를 실행하며, 성공한 경우 0을 반환합니다.

[계산기 실행화면]

 

os.startfile(path[, operation])

 

<path>를 os에서 지정된 프로그램으로 실행합니다.

또한 <operation>으로 명시적으로 수행할 프로그램을 지정할 수 있습니다.

 

(※ starfile('LICENSE.txt')의 경우 system("Notepad LICENSE.txt')와 유사하지만 system()을 사용하는

경우에는 파이썬 프로그램의 실행이 잠시 멈추고 system()이 끝나길 기다리게 되고, startfile()은

멈추지 않고 계속 실행됩니다.)

 

os.execl(path, arg0, arg1, ...)

os.execle(path, arg0, arg1, ..., env)

os.execlp(file, arg0, arg1, ...)

os.execlpe(file, arg0, arg1, ..., env)

os.execv(path, args)

os.execve(path, args, env)

os.execvp(file, args)

os.execvpe(file, args, env)

 

위의 함수는 현재 프로세스에서 새로운 프로그램을 수행시키며 리턴은 하지 않습니다.

인자에 따라 여러 가지 exec로 나뉘어지는데, 우선'l'이 붙은 것들은 입력인자들의 수가 정해져

있는 경우이고, 'v'가 붙은 것들은 args라는 튜플로 입력인자를 받습니다. 'e'가 붙은 경우는

환경변수 env를 받느냔 아니냐의 차이이며, 'p'는 환경변수의 path를 이용하는 경우입니다.

>>> execl('C:\\Python3\python', 'python', '-v')

>>> execv('python', ('python', '-v'))

>>> execle('C:\Python3\python', 'python', '-v', {"HOME":"C:\\"})

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

파이썬 – 날짜시간(datetime) 모듈  (0) 2011.11.26
파이썬 – 시간(time) 모듈  (1) 2011.11.26
파이썬 – sys 모듈  (0) 2011.11.21
파이썬 – os.glob 모듈  (0) 2011.11.20
파이썬 – os.path 모듈  (2) 2011.11.20
Posted by devanix
2011. 11. 21. 17:36

[ Problem ]

http://huge:file@www.pythonchallenge.com/pc/return/uzi.html

§ 그림에 1월 26에 표시된 달력이 보입니다.

하지만 년도는 구멍이 나있어 정확한 년도는 보이지 않고 1xx6년 이라는 추측만 할수 있습니다.

또한 우측하단에 12월과 2월이 보이는데 정확한 숫자는 알수 없으나 2월에 29칸에 차있으므로,

이해는 윤년(leap year)임을 짐작할 수 있습니다.

 

즉, 1xx6년 1월 26일이 월요일 이며 윤년인 해로 요약할 수 있습니다

그럼 해당하는 해를 찾아 봅시다.

 

♧ 필요 메소드

 

calendar.isleap(year)

- 해당 년도가 윤년(leapyear)인지 판별 합니다.

calendar.weekday(year, month, day)

- year(1970-...), month(1-12), day(1-31)에 해당하는 요일을 반환합니다.

- 해당 요일은 월요일(0) ~ 일요일(6)로 0~6까지 'int'형을 반환.

 

♧ Source

 

[출력 결과]

 

출력결과를 보면 5개의 년도가 출력 되었다.(1176, 1356, 1576, 1756, 1976)

해당 HTML 페이지 소스에서 실마리를 찾아보자.

 

§ HTML 페이지 소스에서 힌트 찾기

 

힌트를 주석을 보면...

<!-- he ain't the youngest, he is the second -->

- 그는 최연소가 아니며 두 번째 이다?

즉 해당 년도중 가장 작은수가 아니고 끝에서 두번째인 1756년.

<!-- todo: buy flowers for tomorrow -->

- 내일을 위해 꽃을 사라? (내일... 27일)

 

해당 결과와 힌트를 조합해 보면 1756년 1월 27일이 된다.

▷ 검색해 보면 모차르트(mozart) 탄생일 이라는것을 알수 있다.

 

next challenge : mozart.html

[ Solution ]

http://huge:file@www.pythonchallenge.com/pcc/return/mozart.html

 

Posted by devanix
2011. 11. 21. 13:33

[ Problem ] - http://huge:file@www.pythonchallenge.com/pc/return/italy.html

♧ 타이틀은 walk around 이고 빵 한 개와 바코드와 비슷하게 보이는 사진이 있다.

   

▷ 소스를 보자!

   

▷ 소스를 보면 'italy.jpg'는 빵 사진이고 'wire.png'는 바코드처럼 보이는 사진이다.

'wire.png'를 클릭해보면 '10000 x 1 pixels' 이라 아무것도 보이지 않는데

이것을 잠시 size를 '100 x 100'로 바꿔 보면 (크롬의 개발자 모드)

메인과 같은 바코드와 같은 그림이 보이는 것을 알 수 있다.

   

위에 소스에서 remember 주석을 참조해 보면 아래의 그림과 같이

바깥에서 부터 100+99+99+98+98+97...과 같이 2회당 1씩 감소한다.

즉, 위의 바코드 이미지를 아래와 같이 Pixel값을 회전하면서 재배치 한다.

   

w 이를 바탕으로 소스를 짜보면 다음과 같습니다.

   

[결과 이미지]

[ 'cat.html' 접속 화면 ]

   

▷ 마지막으로 'uzi.html' 접속하면 끝.

   

[ Solution ] - http://huge:file@www.pythonchallenge.com/pcc/return/uzi.html

(※ 문제에 대한 다양한 해결법은 링크 참조.)

Posted by devanix
2011. 11. 21. 01:13

sys모듈은 파이썬 인터프리터와 관련된 정보와 기능을 제공하는 모듈이다.

 

sys.argv

 

파이썬 스크립트로 넘어온 입력인자(argument)들의 리스트.

- 아래 예제와 같이 0번째는 스크립트 이름이 있으며, 그 이후부터 인자들이 설정

[ test_argv.py 예제코드 ]

import sys

print("argv size :", len(sys.argv))

for i, arg in enumerate(sys.argv):

        print(i, arg)

 

[ 실행 결과 ]

>test_argv.py arg1

argv size : 2

0 C:\Python30\test_argv.py

1 arg1

 

 

sys.exc_info()

 

현재 발생한 예외정보를 튜플로 반환 (예외가 없는 경우 None을 반환)

[ 예외가 없는 경우 ]

>>> import sys

>>> sys.exc_info()

(None, None, None)

 

[ 예외가 발생한 경우 ]

>>> try:

    1/0

except:

    exc_class, val, tb_ob = sys.exc_info()

    print(exc_class)

    print(val)

    print(tb_ob)

    print(dir(tb_ob))

    print(tb_ob.tb_lineno)

 

    

<class 'ZeroDivisionError'>

division by zero

<traceback object at 0x00FFAAF8>

['tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next']

2

 

 

sys.prefix, sys.exec_prefix, sys.executable

 

파이썬이 설치된 경로와 실행파일을 나타냅니다.

>>> sys.prefix # 파이썬이 설치된 경로

'C:\\Python3'

 

>>> sys.exec_prefix

'C:\\Python3'

 

>>> sys.executable # 파이썬 인터프리터의 실행파일 경로

'C:\\Python3\\pythonw.exe'

 

sys.exit([arg])

 

프로세스를 종료시킵니다. (arg가 0인 경우에는 정상 종료되며, 0이 아닌 경우에는 비정상종료 처리)

 

sys.getrefcount(object)

 

객체의 참조 카운트 값을 반환합니다.

일반적으로 이 값은 임시객체가 참조하는 경우도 포함되어서 1보다 크다.

>>> t = "test refcount"

>>> sys.getrefcount(t)

2

>>> t1 = t

>>> sys.getrefcount(t)

3

 

sys.getwindowsversion()

 

현재 윈도우의 버전을 튜플로 반환.

>>> sys.getwindowsversion()

sys.getwindowsversion(major=5, minor=2, build=3790, platform=2, service_pack='Service Pack 2')

 

sys.modules

 

현재 로딩되어있는 모듈들을 사전 형태로 나타냅니다.

>>> sys.modules

{'heapq': <module 'heapq' from 'C:\Python3\lib\heapq.py'>, 'tkinter.filedialog':

<module 'tkinter.filedialog' from 'C:\Python3\lib\tkinter\filedialog.py'>, 'functools':

<module 'functools' from 'C:\Python3\lib\functools.py'>, 'random': <module

'random' from 'C:\Python3\lib\random.py'>, ...<생략>...

 

sys.path

 

모듈을 찾을 때 참조하는 경로를 나타냅니다.

>>> sys.path

['C:\\Python3\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python32.zip',

'C:\\Python3\\DLLs', 'C:\\Python3\\lib', 'C:\\Python3', 'C:\\Python3\\lib\\site-packages']

 

sys.copyright, sys.version

 

설치된 파이썬의 저작권, 버전을 나타냅니다.

>>> sys.copyright

'Copyright (c) 2001-2011 Python Software Foundation.\nAll Rights Reserved.\n\nCopyright

(c) 2000 BeOpen.com.\nAll Rights Reserved.\n\nCopyright (c) 1995-2001 Corporation for

National Research Initiatives.\nAll Rights Reserved.\n\nCopyright (c) 1991-1995

Stichting Mathematisch Centrum, Amsterdam.\nAll Rights Reserved.'

 

>>> sys.version

'3.2.2 (default, Sep 4 2011, 09:51:08) [MSC v.1500 32 bit (Intel)]'

 

sys.getdefaultencoding()

 

현재 사용중인 기본 문자열 인코딩을 반환합니다.

>>> sys.getdefaultencoding()

'utf-8'

 

sys.stdin, sys.stdout, sys.stderr

 

표준 입력, 출력, 에러 스트림에 대응되는 파일 객체들을 나타냅니다.

>>> sys.stdout.write("hi python") # 표준 출력 스트림

hi python

>>> sys.stderr.write("hi python") # 표준 에러 스트림

hi python

 

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

파이썬 – 시간(time) 모듈  (1) 2011.11.26
파이썬 – os 모듈  (2) 2011.11.22
파이썬 – os.glob 모듈  (0) 2011.11.20
파이썬 – os.path 모듈  (2) 2011.11.20
파이썬 – 정규식표현식(Regular Expression) 모듈  (8) 2011.11.20
Posted by devanix
2011. 11. 20. 23:07

glob 모듈은 윈도우의 dir 명령어나 리눅스의 ls 명령어와 유사한 기능을 제공합니다.

 

glob.glob(path)

 

glob() 함수는 경로에 대응되는 모든 파일 및 디렉터리의 리스트를 반환합니다.

'*''?'도 사용가능하며 "[""]"를 사용한 문자열 비교도 가능합니다.

>>> glob.glob('*')

['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'README.txt', 'tcl', 'Tools', 'w9xpopen.exe']

>>> glob.glob('./[0-9].*')

['./1.gif', './2.txt']

>>> glob.glob('*.gif')

['1.gif', 'card.gif']

>>> glob.glob('?.gif')

['1.gif']

>>> glob.glob('*.exe')

['python.exe', 'pythonw.exe', 'w9xpopen.exe']

>>> from os.path import *

>>> glob.glob(abspath('.' + '\\*.exe'))

['C:\\Python30\\python.exe', 'C:\\Python30\\pythonw.exe', 'C:\\Python30\\w9xpopen.exe']

 

glob.iglob(path)

 

glob과 동일한 동작을 수행하지만, 리스트로 결과를 반환하는 것이 아니라 이터레이터를 반환.

한번에 모든 결과를 리스트에 담지 않으므로, 결과가 매우 많은 경우 유용하게 쓰일 수 있다.

>>> glob.iglob('*')

<generator object iglob at 0x012230D0>

>>> for i in glob.iglob('*'):

    print (i)

 

    

DLLs

Doc

include

Lib

libs

LICENSE.txt

NEWS.txt

python.exe

pythonw.exe

README.txt

tcl

Tools

w9xpopen.exe

 

 

[ Example ] - Tree 예제

w tree는 하위 디렉터리 구조를 보여 주는 툴입니다.

os.pathglob의 일부 기능을 이용해서 tree와 비슷한 기능을 수행하는 예제 작성.

 

[ tree.py 소스코드 ]

 

[ 실행결과 ]

 

Posted by devanix
2011. 11. 20. 21:17

os.path는 파일 경로를 생성 및 수정하고, 파일 정보를 쉽게 다룰 수 있게 해주는 모듈.

 

os.path.abspath(path)

 

현재 경로를 Prefix로 하여 입력받은 경로를 절대경로로 바꿔서 반환합니다.

>>> abspath('tmp')

'C:\\Python30\\tmp'

 

os.path.basename(path)

 

입력받은 경로의 기본 이름(base name)을 반환합니다.

abspath() 함수와 반대되는 기능을 수행한다고 볼 수 있습니다.

>>> basename('C:\\Python30\\tmp')

'tmp'

>>> basename('C:\\Python30\\tmp\\test.txt')

'test.txt'

 

os.path.commonprefix(path_list)

 

입력받은 path_list로부터 공통적인 Prefix를 추출해서 반환합니다. 그러나 이 결과는 문자열 연산에

의한 것이기 때문에 다음의 두 번째 예제와 같이 잘못된 경로가 나올 수도 있습니다.

>>> commonprefix(['C:\\Python30\\Lib', 'C:\\Python30', 'C:\\Python30\\Tools'])

'C:\\Python30'

>>> commonprefix(['C:\\Python26\\Lib', 'C:\\Python25\\Tools'])

'C:\\Python2'

 

os.path.dirname(path)

 

입력받은 파일/디렉터리의 경로를 반환합니다.

>>> dirname('C:\\Python30\\tmp\\test.txt')

'C:\\Python30\\tmp'

>>> dirname('C:\\Python30\\tmp')

'C:\\Python30'

 

os.path.exists(path)

 

입력받은 경로가 존재하면 True를 반환하고, 존재하지 않는 경우는 False를 반환합니다.

리눅스와 같은 OS에서는 파일이나 디렉터리가 존재하지만 읽기 권한이 없는 경우에도,

False를 반환할 수 있습니다.

>>> exists('C:\\Python30')

True

>>> exists('C:\\Python30\\Devanix')

False

 

os.path.expanduser(path)

 

입력받은 경로안의 "~"를 현재 사용자 디렉터리의 절대경로로 대체합니다.

"~"에 붙여서 <사용자명>을 붙이면 원하는 사용자 경로로 대체됩니다.

(유닉스/리눅스의 홈디렉터리를 나타내는 '~'과 동일합니다)

>>> expanduser('~\\devanix')

'C:\\Documents and Settings\\Administrator\\devanix'

 

os.path.expandvars(path)

 

path안에 환경변수가 있따면 확장합니다. (환경변수는 os.environ에 정의된 것을 참조)

>>> expandvars('$HOME\\temp')

'C:\\Documents and Settings\\Administrator\\temp'

>>> expandvars('$SYSTEMROOT\\var')

'C:\\WINDOWS\\var'

 

os.path.getatime(path)

 

입력받은 경로에 대한 최근 접근 시간을 반환 (반환되는 값은 epoch(1970년 1월 1일) 이후

초단위로 반환됩니다. 파일이 없거나 권한이 없는 경우 os.error 예외 발생)

>>> getatime('C:\\Python30\\python.exe')

1320966393.375

# 읽을 수 있는 형식으로 보려면 다음과 같이 하면 됩니다.

>>> import time

>>> time.gmtime(getatime('C:\\Python30\\python.exe'))

time.struct_time(tm_year=2011, tm_mon=11, tm_mday=10, tm_hour=23, tm_min=6, tm_sec=33, tm_wday=3, tm_yday=314, tm_isdst=0)

 

os.path.getmtime(path)

 

입력받은 경로에 대한 최근 변경 시간을 반환 (파일이 없거나 권한이 없는 경우 os.error 예외 발생)

>>> getmtime('C:\\Python30\\python.exe')

1320966397.453125

 

os.path.getctime(path)

 

입력받은 경로에 대한 생성시간을 반환 (유닉스와 같은 운영체제에서는 생성시간이 아닌

최근 변경 시간을 반환할 수도 있습니다. 파일이 없거나 권한이 없는 경우 os.error 예외 발생)

>>> getctime('C:\\Python30\\python.exe')

1320966393.0625    

 

os.path.getsize(path)

 

입력받은 경로에 대한 바이트 단위의 파일크기를 반환.

(파일이 없거나 권한이 없는 경우 os.error 예외 발생)

>>> getsize('C:\\Python30\\python.exe')

26624L

 

os.path.isabs(path)

 

경로가 절대경로이면 True를 반환하고, 그 외의 경우에는 False를 반환.

(실제 해당 경로를 검사하지는 않으며 입력받은 문자열을 가지고 판단합니다.)

>>> isabs('C:\\Python30\\python.exe')

True

 

os.path.isfile(path)

 

경로가 파일인지 아닌지 검사합니다. 파일인 경우에는 True를 반환하고, 그 외의 경우 False를 반환.

(혹은 해당 경로가 존재하지 않은 경우에는 False를 반환합니다)

>>> isfile('C:\\Python30\\python.exe')

True

>>> isfile('C:\\Python26\\python.exe')

False

 

os.path.isdir(path)

 

경로가 디렉터리인지 아닌지 검사합니다. 디렉터리인 경우에는 True를 반환하고, 그 외의 경우에는

False를 반환합니다. 혹은 경로가 존재하지 않은 경우에는 False 반환합니다.

>>> isdir('C:\\Python30\\python.exe')

False

>>> isfile('C:\\Python30\\Lib')

True

 

os.path.join(path1[,path2[,...]])

 

해당 OS 형식에 맞도록 입력 받은 경로를 연결합니다. (입력 중간에 절대경로가 나오면 이전에

취합된 경로는 제거하고 다시 연결합니다)

>>> join('C:\\Python30', 'Script', 'test.py')

'C:\\Python30\\Script\\test.py'

>>> join('C:\\Python30', 'D:\\Test', 'test.py')

'D:\\Test\\test.py'

 

os.path.normcase(path)

 

해당 OS에 맞도록 입력 받은 경로의 문자열을 정규화 합니다. (윈도우와 같은 경우,

아래 예제와 같이 소문자로 바꾸고 '/''\\'로 변경합니다)

>>> normcase('C:\\Python30\\python.exe')

'c:\\python30\\python.exe'

>>> normcase('C:/Python30/python.exe')

'c:\\python30\\python.exe'

 

os.path.normpath(path)

 

입력 받은 경로를 정규화합니다. (현재 디렉터리(".")나 상위 디렉터리("..")와 같은 구분자를 최대한 삭제)

>>> normpath('C:\\Python30/./python.exe')

'C:\\Python30\\python.exe'

>>> normpath('C:\\Python30/./../python.exe')

'C:\\python.exe'

 

os.path.split(path)

 

입력 받은 경로를 디렉터리 부분파일 부분으로 나눕니다.

단순한 문자열 연산이므로 실제 파일의 존재 여부는 확인하지 않습니다.

>>> split('C:\\Python30\\python.exe')

('C:\\Python30', 'python.exe')

 

os.path.splitdrive(path)

 

입력 받은 경로를 드라이브 부분과 나머지 부분으로 나눕니다.

단순한 문자열 연산이므로 실제 파일의 존재 여부는 확인하지 않습니다.

>>> splitdrive('C:\\Python30\\python.exe')

('C:', '\\Python30\\python.exe')

 

os.path.splitext(path)

 

입력 받은 경로를 확장자 부분과 그 외의 부분으로 나눕니다.

단순한 문자열 연산이므로 실제 파일의 존재 여부는 확인하지 않습니다.

>>> splitext('C:\\Python30\\python.exe')

('C:\\Python30\\python', '.exe')

 

※ (다음 예제 코드는 from os.path import *를 하고 나서 실행)

Posted by devanix