2015. 6. 12. 15:05

getopt 모듈의 getopt함수를 이용하면, 

sys.argv로 전달받은 명령행의 인수리스트에서 옵션을 분리해 낼 수 있다!


아래와 같이 쓸 수 있다.

import sys

import getopt


options, args = getopt.getopt(sys.argv[1:], 'a:b:c:')


for op, p in options:

    if op == '-a':

        print 'option a', p

    elif op == '-b':

        print 'option b', p

    elif op == '-c':

        print 'option c', p

    else:

        print 'Unknown option', op

print args

$ python _getopt.py -a apple -b banana -c cat people agg

[('-a', 'apple'), ('-b', 'banana'), ('-c', 'cat')]

option a apple

option b banana

option c cat

['people', 'agg']


getopt함수

첫번째 : 인수리스트(sys.argv[1:])

두번째 : 옵션문자들('a:b:c:')

이때 옵션문자에 :가 사용된다면 옵션에 추가의 인수를 받아들인다는 의미!

abc:de:

라면, a,b,d는 단독옵션이고, c,e는 인수를 갖는 옵션이다!


출처: 열혈강의 파이썬프로그래밍(이강성저)



Posted by Triany
2015. 6. 12. 14:29

언어마다 제어문을 기술하는 방식이 조금 달라, 사용할때마다 항상 조금씩 헷갈린다!

if ( a > 5 ) { }  ?

if a > 5 : ? 기타등등!

헷갈릴까봐 정리하는 파이썬 구문들!


python 파이썬 if - elif - else문

if 조건식1:

    <문들1>

elif 조건식2:

    <문들2>

else:

    <문들>

n = -2

if n > 0:

    print 'Positive'

elif n < 0:

    print 'Negative'

else:

    print 'Zero'



python 파이썬 for문

for <타겟>  in<객체>:

    <문1>

else:

    <문2>

lists = ['rabbit', 'iPad', 'people']

for item in lists:

    print item



python 파이썬 while문!

while <조건식>:

    <문1>

else:

    <문2>

count = 1

while count < 11:

    print count,

    count = count + 1


출처: 열혈강의 파이썬(이강성 저)

Posted by Triany
2015. 6. 6. 12:34


python에서 1 days ago를 표현하려면 어떻게 해야할까?
또 1 days ago를 구한 후, 원하는 포맷으로 출력하려면 어떻게 해야할까?


python 인터프리터 모드에서의 예
>>> import datetime
>>> days_ago = datetime.datetime.now() - datetime.timedelta(days=1)
>>> print days_ago.strftime("%Y-%m-%d, %H:%M:%S")
2015-06-05, 12:17:47

이때 datetime.now()는 datetime.today()로 써도 본 예제에서는 무방하다.


datetime.today()   현재 지방 기준의 datetime 객체 생성

datetime.now([tz]) 현재 지방기준의 datetime 객체를 생성한다.(시간대 정보가 특별히 입력되지 않으면 플랫폼의 시간을 사용)



>strftime(format) : 지정된 포맷에 맞춰 date 객체의 정보를 문자열로 반환


 지시자 

 내용

 %y 

 연도를 축약('15') 

 %Y

 연도를 축약하지 않고 표시('2015')

 %m

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

 %b

 축약된 월이름('Apr') 

 %B

 축약되지 않은 월이름('April') 

 %d

 일(01~31) 

 %j

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

 %a

 축약된 요일 이름('Mon')

 %A

 축약되지 않은 요일 이름('Monday') 

 %w

 요일을 숫자로 표시

 (0:일, 1:월, 2:화, 3:수, 4:목, 5:금, 6:토) 

 %H

 24시를 기준 시(00~23)

 %I

 12시를 기준 시(01~12)

 %M

 분(00~59)

 %S

 초(00~60)

 %p

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

Posted by Triany
2015. 6. 5. 15:20

모든 파이썬 모듈은 독립적으로 수행될 수도 있고,

다른 모듈에 의해 호출될 수도 있다!


이때 지금 모듈이 가장먼저 수행되는 최상위 모듈인지, 

아니면 다른 모듈에 의해 임포트 되는 모듈인지 구별하기 위해!

__name__ 이라는 내장이름을 가지고 있다.!


인터프리터 모드에 의해 수행해 보면 

른 모듈에 의해 임포트 되는 모듈의 경우 일반적으로 자신의 모듈 이름을 가진다!

>>> import urllib2

>>> urllib2.__name__

'urllib2'

>>> import os

>>> os.__name__

'os'


그럼, 아래 파일을 실행해 보겠다.


name.py

#!/bin/python

print __name__




$ python name.py

__main__

name.py가 프로그램 모드로 수행되면 __name__은 '__main__'이란 이름을 가진다.



가장 먼저 파이썬 인터프리터에 의해 사용되는 모듈이 __main__ 이란 이름을 가진다는 것을 이용하면

아래와 같은 방식으로 특정 코드를 선택적으로 실행하게 할 수 있다.

다른 모듈에 의해 임포트 될 때는 수행되지 않는다.

#!/bin/python


def print():

    print 'Hi'


if __name__ == '__main__'

    printf()



출처 : 프리렉 이강성의 열혈강의 파이썬 ver.2

Posted by Triany
2015. 2. 25. 18:57

파이썬은 신비하고도 아름다운 언어이다.

얼마전에 파이썬의 엄청난 예제를 보았는데 그 예제를 보고 난 더욱더 파이썬의 아름다움에 감탄을 금지 않을 수 없었다.


☆ for문에도 else가 있다.

# 소수값을 출력하는 예제

 #!/bin/py

for n in range(2, 10):  # 첫번째 for문

    for x in range(2, n):  #두번째 for문

        if n % x == 0:

            print n, 'equals', x, '*', n/x

            break

    else: #이 else문은 두번째 for문에 대한 else로 if에 대한 else 가 아니다.

        print n, 'is a prime number'

결과

$ python prime.py

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3



for문이 break를 만나지 않는다면 for문을 다 거치고 무조건 else
break를 만난다면 for문을 완전히 빠져나와서 else를 안거친다!




Posted by Triany
2014. 5. 27. 11:37

얼마전 스마트폰 메신저 txt파일을 백업받아 vi에서 열어보았더니 ^M이라는 이상한 기호를 발견했다.

웹에서 찾아보니, 개행문자 즉 줄바꿈 문자가 깨진 흔적이라고 한다.! 

주로 같은 파일안에 유닉스개행문자 / 도스 개행문자가 섞여 있을때 발생하는 현상이라고!

관련해서 내용을 구글링하다가 발견했다.


^M = \r 

간단히 해결해 보았다.


str = hello^M

str.repleace('r', '')


다음에 참고해 두기 위해 포스팅해보았다.



[내 블로그 안에서 비슷한 내용]

vi에서 ^M 지우기, 행끝의 캐럿 M기호 지우기


Posted by Triany
2014. 5. 23. 15:53

이 문서는 파이썬 2점대를 기준으로 작성되었습니다.

10 정규식

 

1-1 반복 메타 문자

반복 메타 문자

의미

*

0 이상 반복

ca*t ct, cat, caat, caaaat등과 매치

+

1 이상 반복

ca+t cat, caaaat등과 매치

?

0 혹은 1

ca?t ct, cat 매치된다.

{m}

m 반복

ca{2} caa 매치된다.

{m,n}

m회부터 n회까지 반복

ca{2,4}t caat, caaat, caaaat 매치

 

 

1-2 매칭 메타 문자

. : - 줄바꿈 문자를 제외한 모든 문자와 매치 (re.DOTALL모드 사용하면 줄바꿈 문자 매치)

 

^ : - 문자열의 시작과 매치

- [] 메타 기호 안에서 반대의 문자열의 취함 [^5] 5 아닌 문자

 

$ : - 문자열의 마지막과 매치

- [] 메타 기호안에서는 메타 기호로 사용되지 않고 순수한 $문자로 매치된다.

 

[] : - 문자 집합을 나타낸다. ( [abc] a, b, c 문자를 의미. == [a-c])

- [a-zA-Z0-9] 영문자 숫자를 의미

 

| : - a|b a 또는(or) b 의미

 

() : - 정규식을 그룹으로 묶는다.

 

 

[이스케이프 기호]

\\ : 역슬래쉬 문자 자체를 의미한다.

\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 : \b 반대로 단어의 경계가 아님을 나타낸다.


※출처 : 프리렉 파이썬_이강성 저 

 

[ 참고 ] 파이썬 정리 포스팅들 

--------------------------------------------------

[파이썬] python 문자열 함수정리


[파이썬] python 리스트 함수정리


[파이썬] python 튜플 함수정리




[파이썬] python 정규식 정리

-------------------------------------------------------------------------------

Posted by Triany
2014. 5. 23. 15:52

이 문서는 파이썬 2점대를 기준으로 작성되었습니다.


10 함수

[람다함수]

lambda 콤마로 구분된 인수들 : #labmda x, y : x + y

 

[함수적 프로그래밍 - map 내장함수, 순서쌍 만들기]

map(f, X) #f:사상함수 X: 입력집합

X = [1,2,3,4,5]

Y = map(labda a:a*a, X)

map(None, [1,2,3], [4,5,6,7,8]) #순서쌍. 인수 None

                            #[(1,4), (2,5), (3,5),(None, 7), (None,8)]

cf)zip([1,2,3], [4,5,6,7,8]) #[(1,4), (2,5), (3,5)]

 

[함수적 프로그래밍 - filter 내장함수, 시퀀스 자료중 필터링하여 참인 요소만 출력]

filter(lambda x:x>2, [1,2,3,34]) #[3, 34]

 

[함수적 프로그래밍 - reduce 내장함수]

reduce( 함수, 시퀀스형[, 초기값] )

reduce(lambdz x, y : x+y, [1,2,3,4,5]) #15

 

[함수객체의 속성]

def f():

pass

f.__doc__ #문서 문자열

f.func_doc

f.__name__ #함수의 이름

f.func_name

f.func_defaults #기본 인수 값들

f.func_code #함수의 코드 객체

f.func_globals #전역 영역

 

[함수의 코드객체 func_code]

code = func_code

code.co_name #함수의 이름

code.co_argcount #필수적인 인수의 개수

code.co_nlocals #전체 지역 변수의

code.co_varnames #지역 변수의 이름들

code.co_code #코드 객체의 바이트 코드 명령어

code.co_names #바이트 코드가 사용하는 이름들

code.co_filename #코드 객체를 포함하는 파일 이름

code.co_flags #코드객체가 가변 인수(*args, 0x04) 키워드 인수(**kw, 0x08) 갖는지 검사

#(하위 두개의 비트는 내부적으로 사용)


※출처 : 프리렉 파이썬_이강성 저



[ 참고 ] 파이썬 정리 포스팅들 

--------------------------------------------------

[파이썬] python 문자열 함수정리


[파이썬] python 리스트 함수정리


[파이썬] python 튜플 함수정리




[파이썬] python 정규식 정리

-------------------------------------------------------------------------------

Posted by Triany
2014. 5. 23. 15:51

이 문서는 파이썬 2점대를 기준으로 작성되었습니다.

9 파일

[파일쓰기]

f = file('t.txt', 'w') # f = open('t.txt', 'w')

f.write(s) #문자열 파일에 기록

f.close()

 

[파일읽기]

f = file('t.txt') # f = open('t.txt')

s = f.read()

 

[라인단위로 파일읽기]

line = f.readline() # 번에 줄씩 읽는다.

list = f.readlines() #파일 전체를 라인 단위로 끊어서 리스트에 저장

f.readlines() #readlines 유사하지만 파일 전체를 한꺼번에 읽기 않고,

필요할 때문 읽어서 공급

 

[라인단위로 파일 쓰기]

f.writelines(lines) #리스트 안에 잇는 문자열을 연속해서 출력(list '\n'있는경우)

f.write(''.join(lines))

f.write('\n'.join(lines))(list '\n' 없는경우)

 

[파일에서 원하는 만큼의 문자읽기]

f.read(10) #f.read(num)

 

[파일 처리 모드]

파일 처리 모드

설명

r

읽기 전용

w

쓰기 전용

a

파일 끝에 추가(쓰기 전용)

r+

읽고 쓰기

w+

읽고 쓰기(기존 파일 삭제)

a+

파일 끝에 추가(읽기도 가능)

rb

이진 파일 읽기 전용

wb

이진 파일 쓰기 전용

ab

이진 파일 파일 끝에 추가(쓰기 전용)

rb+

이진 파일 읽고 쓰기

wb+

이진 파일 읽고 쓰기(기존 파일 삭제)

ab+

이진 파일 파일 끝에 추가(읽기도 가능

f = open('f.txt', 'a') #파일 추가 모드로 오픈

 

[임의 접근 파일]

f.seek(n) #파일의 n번째 바이트로 이동

f.seek(n, 1) #현재 위치에서 n바이트 이동(n 양수면 뒤쪽으로, 음수면 앞쪽)

f.seek(n, 2) # 마지막에서 n바이트 이동(n 보통 음수)

f.tell() #현재의 파일 포인터 위치 돌려줌

 

[파일 객체 method 요약]

file.close() #파일을 닫는다. 이상 입출력 없게

file.read([size]) #원하는 바이트 수만큼 파일에서 읽어온다. 인수를 지정하지 않으면 전체 파일 read

file.readline() #라인 하나를 읽어들인다. size 지정되면 읽을 있는 최대 바이트 수가

file.readlines() #전체 라인을 readline() 이용하여 읽어들인 라인을 리스트에 넣어서 리턴

file.write(str) #문자열 str 파일에 쓴다.

file.writelines(list) #문자열 리스트를 파일에 쓴다. 줄바꾸기가 자동으로 삽입되지는 않음

file.seek(offset[,whence]) #whence 기본값은 0. (0: 시작기준, 1:현재위치, 2:끝기준)

#offset만큼 떨어진 위치에 파일 포인터 위치

file.tell() #파일의 현재 위치를 리턴

file.flush() #버퍼가 채워지지 않았어도 내부 버퍼의 내용을 파일에 보낸다.

file.fileno() #file객체의 파일 기술자(File Descriptor)(정수) 리턴

file.isatty() #만일 file객체가 tty 같은 장치이면 1 아니면 0 리턴

file.truncate([size]) #파일 크기를 지정된 크기로 잘라 버림. 인수를 주지 않으면 현재 위치에서 자름

 

[파일 객체 속성]

file.closed #file close 되었으면 1, 아니면 0

file.mode #파일이 오픈된 모드

file.name #open() 사용된 파일 이름

file.softspace #1이면 print문을 사용할 출력 사이에 자동적으로 스페이스 출력됨.

#0이면 스페이스가 자동으로 삽입되지 않음

 

[표준 .출력 방향 전환]

import stys

sys.stdout #표준 출력

sys.stderr #표준 에러

sys.stdin #표준 입력

sys.stdout = f = StringIO.StringIO() #출력 파일 방향 전환

s = f.getvalue() #내부 문자열 가져오기

f = StringIO.StringIO(s) #문자열 객체에서 파일 객체 얻어내기

 

[지속모듈 -DBM]

#사전 자료형과 사용법 유사

#키와 값은 반드시 문자열이어야

import anydbm

f = anydbm.open('music', 'c') #'c' 파일이 없으면 생성하고 읽기로 오픈

 

[지속모듈-피클링] #임의의 파이선 객체 저장

import pickle

pickle.dump(출력할 객체, 파일 객체) #객체를 파일로 출력

object = pickle.laod(파일 객체) #객체에서 파일 읽어 들임

#문자열로 객체를 출력, 문자열에서 객체 읽어들이려면.. dumps, loads

s = pickle.dumps(출력할 객체) #출력할 객체 피클링

 

object = pickle.load(s) #언픽클링


※출처 : 프리렉 파이썬_이강성 저 

Posted by Triany
2014. 5. 23. 15:50

이 문서는 파이썬 2점대를 기준으로 작성되었습니다.

8 객체의 복사 변환

 

[copy 모듈을 이용한 객체 복사]

import copy

y = copy.copy(x) #얕은 복사

y = copy.deepcopy(x) #깊은 복사

 

[수치형변환 - 1)정수형 변환]

int(1.1) #1 #내장함수 int()

rount(1.1) #1.0 #반올림하여 정수형의 실수취함

import math

math.floor(1.1) #1.0 #내림연산

math.ceil(1.1) #2.0 #올림 연산

 

[수치형변환 - 2)실수, 롱형으로의 변환]

float(10) #10.0 #실수형으로 변환

long('1234') #1234 #롱형 정수로 변환

complex(1, 3) #(1+3j) #복소수 형으로 변환

 

[시퀀스 자료형 변환]

list('abcd') #list() 리스트로 변환

tuple('abcd') #tuple() 튜플로 변환

 

[문자열로의 변환]

str([1,2,]) #비형식적인 문자열 변환

repr([1,2]) #형식적인 문자열 변환

eval('[1, 2]') #[1,2] #문자열 '[1,2]' 로부터 역으로 리스트 생성

#eval 문자열로 표현식을 실행하는 내장함ㅅ

 

[문자열 요소를 가지는 리스트나 튜플을 문자열로 변환]

L = ['Pyton', 'is', 'the', 'first', 'language']

' '.join(L) #문자열로 합침

 

[리스트, 튜플, 사전의 변환]

사전 -> 리스트

D = {1:'one', 2:'two'}

D.key() #키값 리스트로

D.value() #value 리스트로

D.items() #[(key, value) ...]

리스트 ->사전

key = ['a', 'b']

value = [1,2]

D =dict( zip(key, values))

 

[문자변환]

chr(97) #ascii ->문자

ord('a') #문자->ascii

 

[진수변환]

int('64', 16) #16진수 '64' 10진수로

int('144', 8) #8진수 '144' 10진수로

int('101111', 2) #2진수 '101111' 10진수로

int('14', 5) #5진수 '14' 10진수로

hex(100) #10진수를 16진수로

oct(100) #10진수를 8진수로

 

[정수를 콤마가 있는 문자열로 변환]

import locale

locale.setlocale(locale.LC_ALL, "") #사용자 기본환경으로 설정

print locale.format("%d", 10030405, 1) #'10,030,405


※출처 : 프리렉 파이썬_이강성 저 



[ 참고 ] 파이썬 정리 포스팅들 

--------------------------------------------------

[파이썬] python 문자열 함수정리


[파이썬] python 리스트 함수정리


[파이썬] python 튜플 함수정리




[파이썬] python 정규식 정리

-------------------------------------------------------------------------------

Posted by Triany