2011. 12. 8. 10:29

Ÿ FTP(File Transfer Protocol) 프로토콜 클라이언트는 새로 구현할 필요가 없다.

ftplib 모듈이 FTP클래스를 지원하며 이것은 클라이언트 측의 FTP 프로토콜을 구현한다.

이 클래스를 다른 FTP 사이트의 미러링과 같은 자동화된 FTP 작업을 수행하기 위해 사용할 수 있다.

 

FTP는 기본 포트 21/20을 사용하는 이중 채널 프로토콜이다. 서버의 21번 포트는 제어 연결로서

제어 정보를 전달하는 데 사용되고, 20번 포트는 데이터를 교환하는 데 사용된다.

ftplib는 기본적으로 패시브(Passive)모드로 동작한다. 즉, 서버가 데이터 포트를 먼저 열고,

데이터 포트 정보를 제어 연결 포트를 통해 전달하면 클라이언트가 포트로 접속하는 방식이다.

(※ FTP 규약에 관한 자세한 정보는 인터넷 RFC 959를 참조.)

 

[ 객체 생성 ]

class ftplib.FTP(host[, user[, passwd[, acct]]]))

 

ftp 객체를 생성한다.

host가 주어지면 서버로 연결(connect(host))하고,

부가적으로 user, passwd 정보가 주어지면 로그인(login(user, passwd, acct))이 된다.

>>> from ftplib import FTP

>>> ftp = FTP("ftp1.at.proftpd.org") # connect to host, default port

 

[ 접속 관련 메서드 ]

FTP.connect(host[, port])

 

주어진 (host, port)로 연결.

>>> from ftplib import FTP

>>> ftp = FTP()

>>> ftp.connect("ftp1.at.proftpd.org")

'220 FTP Server ready.'

 

FTP.login([user[, passwd[, acct]]])

 

로그인함 (아무 인수도 주어지지 않으면 'anonymous'로 로그인)

>>> ftp.login(user, password)

 

FTP.close()

 

연결 종료

>>> ftp.close()

 

[ 파일 목록을 얻는 메서드 ]

FTP.dir([argument[, ...]])

 

"LIST"명령으로 파일 목록을 얻는다.

선택적인 인수 argument는 파일 목록을 표시할 디렉터리를 지정한다. (기본값 - 현재 디렉터리)

>>> from ftplib import FTP

>>> with FTP("ftp1.at.proftpd.org") as ftp:

... ftp.login()

... ftp.dir()

...

'230 Anonymous login ok, restrictions apply.'

dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .

dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..

dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS

dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora

...

 

FTP.nlst([argument[, ...]])

 

"NLST" 명령으로 파일 목록을 얻는다.

선택적인 인수 argument는 파일 목록을 표시할 디렉터리를 지정한다. (기본값 - 현재 디렉터리)

>>> ftp.nlst()

['.', '..', 'centos', 'fedora', 'CentOS', 'Fedora', 'ProFTPD', 'grml', 'linux-kernel',

'OpenOffice.org', 'Knoppix', 'LibreOffice']

 

[ 파일 다운로드/저장 메서드 ]

FTP.retrlines(command[, callback])

 

ASCII 모드로 파일을 받는다.

텍스트 파일을 다운로드 받을 때 command는 "RETR 파일 이름"이 된다.

파일 목록을 받을 때 사용한다면 command는 "LIST"가 된다.

callback은 서버로부터 전송되는 블록을 저장할 함수로 기본값은 sys.stdout.write이다.

>>> ftp.retrlines('LIST') # 화면에 파일 목록 표시

dr-xr-xr-x 10 ftp ftp 4096 Aug 12 13:34 .

dr-xr-xr-x 10 ftp ftp 4096 Aug 12 13:34 ..

dr-xr-xr-x 5 ftp ftp 4096 Sep 14 15:23 CentOS

dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora

...

'226 Transfer complete'

 

>>> ftp.cwd('./ProFTPD') # 디렉터리 변경

>>> ftp.retrlines('RETR README.MIRRORS') # 화면에 파일 내용 표시

This is the main distribution site for ProFTPD. Rather than downloading

...

'226 Transfer complete'

 

# 로컬에 저장

>>> ftp.retrlines('RETR README.MIRRORS', open('c:\\readme.txt', 'w').write)

'226 Transfer complete'

 

FTP.retrbinary(command, callback[, maxblocksize[, rest]])

 

이진 파일을 받을 때 사용한다.

command는 "RETR 파일이름"이 된다.

callback은 서버로부터 전송되는 블록을 저장할 함수이다.

>>> ftp.retrbinary('RETR pybbs.tar', open('pybbs.tar', 'wb').write)

 

FTP.storlines(command, file)

 

ASCII 모드로 파일을 서버에 저장한다.

command는 "STOR 파일이름"이며

file은 서버로 데이터를 보내는 데 사용될 readline() 메서드를 제공하는 파일 객체이다.

>>> ftp.storlines('STOR xpath.py', open('xpath.py', 'r'))

 

FTP.storbinary(command, file[, blocksize])

 

이진 모드로 파일을 서버에 저장한다.

command는 "STOR 파일이름"이며

file은 서버로 데이터를 보내는 데 사용될 read() 메서드를 제공하는 파일 객체이다.

>>> ftp.storbinary('STOR test.tgz', open('test.tgz', 'rb'))

 

FTP.abort()

 

파일 전송을 중지한다.

 

 

[파일 관련 메서드]

 

[ 메서드 ]

[ 설명]

size(filename)

서버에 filename의 크기를 요구.(성공-정수 크기, 실패-None)

rename(fromname, toname)

서버에 있는 파일 이름 변경

delete(filename)

서버의 파일을 삭제

 

[디렉터리 관련 메서드]

 

[ 메서드 ]

[ 설명]

pwd()

서버의 현재 디렉터리를 얻는다

cwd(pathname)

서버의 현재 디렉터리를 변경

mkd(pathname)

서버에 디렉터리 생성

rmd(dirname)

서버에 디렉터리 제거

 

[기타 메서드]

 

[ 메서드 ]

[ 설명]

set_pasv(boolean)

만일 boolean이 참이면 passive 모드가 설정.

sendcmd(command)

임의의 단순한 명령을 서버로 전송하고 응답 문자열을 받는다.

voidcmd(command)

임의의 단순한 명령을 서버로 전송하고 응답 코드를 처리한다.

응답 코드가 200-299 영역인 경우에는 리턴 값이 없으며

그렇지 않으면 예외가 발생한다.

 

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

파이썬 – 날짜시간(datetime) 모듈  (0) 2011.11.26
파이썬 – 시간(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

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

 

[ 클래스 ]

[ 내용 ]

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. 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
2011. 11. 20. 16:42

[ 반복 메타 문자 ]

[메타 문자]

[의미]

*

0회 이상 반복

+

1회 이상 반복

?

0회 or 1회

{m}

m회 반복

{m, n}

m회부터 n회까지 반복

 

[ 매칭 메타 문자 ]

[메타 문자]

[의미]

.

줄바꿈 문자를 제외한 모든 문자와 매치됨

^

문자열의 시작과 매치됨

$

문자열의 마지막과 매치됨

[ ]

문자 집합 중 한 문자를 의미

|

또는(or)를 의미

{ }

정규식을 그룹으로 묶음

 

[ 이스케이프 기호 ]

[종류]

[설명]

\\

역슬래쉬 문자 자체

\d

모든 숫자와 매치됨 [0-9]

\D

숫자가 아닌 문자와 매치됨 [^0-9]

\s

화이트 스페이스 문자와 매치됨 [ \t\n\r\f\v]

\S

화이트 스페이스가 아닌 것과 매치됨 [^ \t\n\r\f\v]

\w

숫자 또는 문자와 매치됨 [a-zA-Z0-9_]

\W

숫자 또는 문자가 아닌 것과 매치됨 [^a-zA-Z0-9_]

\b

단어의 경계를 나타냄. 단어는 영문자 혹은 숫자의 연속 문자열

\B

단어의 경계가 아님을 나타냄

\A

문자열의 처음에만 일치

\Z

문자열의 끝에만 일치

 

[ 최소 매칭을 위한 정규식 ]

[기회]

[의미]

*?

*와 같으나 문자열을 취소로 매치함

+?

+와 같으나 문자열을 취소로 매치함

??

?와 같으나 문자열을 최소로 매치함

{m,n}?

{m,n}과 같으나 문자열을 최소로 매치함

 

[ 정규 표현식에서 사용 가능한 플래그 ]

[플래그]

[내용]

I, IGNORECATE

대, 소문자를 구별하지 않는다

L, LOCATE

\w, \W, \b, \B를 현재의 로케일에 영향을 받게 한다

M, MULTILINE

^가 문자열의 맨 처음, 각 라인의 맨 처음과 매치 된다

$는 문자열의 맨 끝, 각 라인의 맨 끝과 매치

S, DOTALL

.을 줄바꾸기 문자도 포함하여 매치하게 한다

U, UNICODE

\w, \W, \b, \B가 유니코드 문자 특성에 의존하게 한다

X, VERBOSE

정규식 안의 공백은 무시된다

 

[ re모듈의 주요 메소드 ]

[메소드]

[설명]

compile(pattern[, flags])

pattern을 컴파일하여 정규식 객체를 반환

match(pattern, string[,flags])

string의 시작부분부터 pattern이 존재하는지 검사하여

MatchObject 인스턴스를 반환

search(pattern, string[,flags])

string의 전체에 대해서 pattern이 존재하는지 검사하여

MatchObject 인스턴스를 반환

split(pattern, string[, maxplit=0])

pattern을 구분자로 string을 분리하여 리스트로 반환

findall(pattern, string[, flags])

string에서 pattern을 만족하는 문자열을 리스트로 반환

finditer(pattern, string[, flags])

string에서 pattern을 만족하는 문자열을 반복자로 반환

sub(pattern, repl, string[, count=0])

string에서 pattern과 일치하는 부분에 대하여

repl로 교체하여 결과 문자열을 반환

subn(pattern, repl, string[, count=0])

sub와 동일하나, 결과로(결과문자열, 매칭횟수)를

튜플로 반환

escape(string)

영문자 숫자가 아닌 문자들을 백슬래쉬 처리해서 리턴.

(임의의 문자열을 정규식 패턴으로 사용할 경우 유용)

 

[ Match 객체 ]

Match객체는 match(), search()의 수행 결과로 생성되며, 검색된 결과를 효율적으로 처리할 수 있는 기능 제공.

◎ Match객체가 지원하는 메소드와 속성

[메소드]

[속성]

group([group1, ...])

입력받은 인덱스에 해당하는 매칭된 문자열 결과의 부분 집합을 반환합니다.

인덱스가 '0'이거나 입력되지 않은 경우 전체 매칭 문자열을 반환합니다.

groups()

매칭된 결과를 튜플 형태로 반환

groupdict()

이름이 붙여진 매칭 결과를 사전 형태로 반환

start([group])

매칭된 결과 문자열의 시작 인덱스를 반환. (인자로 부분 집합의 번호나

명시된 이름이 전달된 경우, 그에 해당하는 시작 인덱스를 반환)

end([group])

매칭된 결과 문자열의 종료 인덱스를 반환. (인자로 부분 집합의 번호나

명시된 이름이 전달된 경우, 그에 해당하는 종료 인덱스를 반환)

pos

원본 문자열에서 검색을 시작하는 위치입니다.

endpos

원본 문자열에서 검색을 종료하는 위치입니다.

lastindex

매칭된 결과 집합에서 마지막 인덱스 번호를 반환. (일치된 결과가 없는 경우

에는 None을 반환)

lastgroup

매칭된 결과 집합에서 마지막으로 일치한 이름을 반환. (정규식의 매칭 조건에

이름이 지정되지 않았거나 일치된 결과가 없는 경우 None 반환)

string

매칭의 대상이 되는 원본 문자열입니다.

 

 

[ 예제 ] - re 모듈 함수

▶ re.match()와 re.search()의 차이

re.match()의 경우 대상 문자열의 시작부터 검색을 하지만,

re.search()함수는 대상 문자열 전체에 대해서 검색을 수행한다.

예) 아래와 같이 검색의 대상이 되는 문자열에 공백이 있는 경우나 또는

검색 키워드와 일치하는 문자열이 대상 문자열의 중간 이후에 존재하는 경우

re.match()함수는 검색을 못함.

 

▶ re.split() - 대상 문자열을 입력된 패턴을 구분자로 하여 분리

 

▶ re.findall() - 검색 문자열에서 패턴과 매칭되는 모든 경우를 찾아 리스트로 반환

 

▶ re.sub() - 패턴과 일치하는 문자열 변경

또한 변경할 문자열에 대해서 매칭된 문자열을 사용할 수도 있다.

 

 

[ 예제 ] - 정규 표현식 객체

▶ 동일한 패턴을 연속적으로 검색하는 경우, 정규식을 컴파일하여 정규표현식 객체를 생성.

 

▶ re.IGNORECASE 플래그로 대소문자 구분하지 않고 매칭 작업 수행

 

▶ re.MULTILINE 플래그를 설정하여 빈 라인을 제외하고 라인별로 분리

 

 

[ 예제 ] - Match 객체

▶ 일반적인 형식의 전화번호를 인삭하여 Match 객체가 지원하는 메소드 분석.

 

▶ 정규식 작성시 '(?<이름>..)' 형식으로 매칭 결과에 대해 이름을 부여하고,

groupdict() 메서드를 이용하여 사전 형태로 이름과 검색된 문자쌍을 얻음.

 

 

    

로우 문자열 표기법 (Raw string notation)

이스케이프 문자열을 표현하기 위하여 '\'(백슬래쉬)문자를 사용하기 때문에, 문자 '\'를 정규표현식

으로 표현하기 위해서는 '\\\\'로, 일반 문자열에선느 '\\'로 표현해야 합니다. 그래서 '\apple'이란

문자열을 검색하기 위해서는 아래와 같이 매우 복잡한 형식으로 표현해야 합니다.

 

 

로우 문자열 표기법은 문자열 앞에 'r'을 더한 것으로, \(백슬래쉬) 문자를 이스케이프 문자열로 처리

하지 않고 일반 문자와 동일하게 처리합니다. 이렇게 함으로써 정규표현식 및 문자열에서 '\'를 간단

하게 표현할 수 있습니다. 일반적으로 정규표현식에 사용되는 문자열에서는 이러한 편리함 때문에

많이 사용합니다.

 

 

Posted by devanix