'프로그래밍 언어/파이썬'에 해당되는 글 17건

  1. 2011.10.06 python 설치시 dependency package 내려받기 (ubuntu)
  2. 2010.04.23 *args, **kwargs
  3. 2009.08.25 MySQLdb 사용하기
  4. 2008.03.27 파일
  5. 2008.03.27 객체의복사 및 형 변환
  6. 2008.03.25 집합자료형
  7. 2008.03.20 사전
  8. 2008.03.20 튜플
  9. 2008.03.20 파일 목록 얻기
  10. 2008.03.20 명령행 인자 사용하기

python 설치시 dependency package 내려받기 (ubuntu)

|
apt-get build-dep python
And

*args, **kwargs

|
* 는 tuple로 저장
** 는 dictionary로 저장

def sum(*args, **kwargs):
    print kwargs
    print args

사용법
sum (1,2,3, a =1, b = 2, c = 3)

결과값
{'a' : 2, 'b' : 2 , 'c':3}
(1,2,3)
And

MySQLdb 사용하기

|

설치 단계 : mysql connector -> MySQL-python


1단계 : mysql connector설치하기

 http://dev.mysql.com/downloads/  에서 MySQL Connector/C 를 다운받아서 설치한다
 rmp버전이면 그냥설치하면되고 rpm버전이 아니라 compile된 버전이라면
 bin -> /usr/local/bin
 lib -> /usr/local/lib
 include -> /usr/local/include 로 옮긴다


2단계 : MySQL-python설치하기

 MySQL-python-1.2.2 을 설치한다
 http://sourceforge.net/projects/mysql-python/files/
 (만약에 설치하다 egg파일 다운로드 실패할경우 직접받아서 MySQL-python폴더에 위치시켜놓자)

 python setup.py build
 python setup.py install


3단계 : 확인

 import MySQLdb 성공하면 OK!!

 

And

파일

|

- 파일쓰고 읽기
   f = file('f.txt', w)
   f.write(s)
   f.close()
   2번째 인자를 생략하면 기본으로 r이된다.
   
   - 라인단위로 파일쓰기
      파일객체의 반복자 이용
        f = open ('t.txt')
        for line in f:
            print line

      readline : 한번에 한줄씩
        f = open ('t.txt')
        line = f.readline()
        while line:
            line = f.readline()

      readlines : 파일전체를 라인단위로 끊어서 리스트에 저장
        f = open ('t.txt')
        for line in f.readlines():
           print line

      xreadlines : 필요할때만 읽어서 공급
        f = open ('t.txt')
        for line in f.xreadlines():
                print line
   
   - 라인단위로 파일쓰기
      f.writelines(lines)
      리스트 안에 있는 문자열을 연속해서 출력한다.

   - 자동으로 줄바꿈 하지 않기위해서 writelines함수를 사용한다.

- 파일에서 원하는 만큼의 문자 읽기
   read 메쏘드에 인수로 원하는 바이트를 써준다
   f = open ('t.txt')
   f.read(10)
     
- 임의 접근 파일
   seek(n) : 파일의 n번째로 이동
   seek(n, 1) : 현재 위치에서 n바이트 이동
   seek(n, 2) : 맨마지막 위치에서 n바이트 이동
   tell() : 현재 위치 알려줌

And

객체의복사 및 형 변환

|
- 객체의 복사
  레퍼런스복사 : 객체는 그대로 두고 객체를 참조하는 주소만 복사
  실제객체 복사 : 실제 객체를 복사한다

- copy모듈을 이용한 객체 복사
  shallow copy : 복합객체를 별도로 생성하되 내용은 원래의 레퍼런스로 채운다
  deep copy : 복합객체를 생성하고 내용을 재귀적으로 복사한다.

  import copy
  a = [1,2,3]
  b = [4,5]
  x = [a,b,100]
  y = copy.copy(x)
  얕은 카피는 a, b는 레퍼런스를 복사한다.
  깊은 카피는 a, b도 객체복사를 한다.
  y = copy.deepcopy(x)

- 형변환
  정수형 변환 : int()
  반올림하여 정수로 : round()
  버리기 : floor() # import math
  올리기 : ceil() # import math
  실수형 : float()
  롱형 : long()
  복소수 : complex (1,3)
  리스트로 : list()
  튜플로 : tuple()

- 객체를 문자열로 변환
   str() : 문자열로 변환, repr보다 보기 좋게 변환해준다
   repr() : 문자열로 변환
   어떤 객체를 문자열로 변환한후 나중에 문자열을 다시 객체로 변환
      a = {1: "one", 2:"two"}
      b = repr (a)
      c = eval (b)
      print c -> {2:'two', 1:'one'}

- 문자열 요소를 가지는 튜플, 리스트를 문자열로 변환
   s = 'python is'
   l = s.split()
   ' '.join(l)

- 사전에서 리스트로 변환
   d.keys(), d.values(), d.items()

- 리스트에서 사전으로 변환
   keys, values
   L=zip (keys, values)

- 문자변환
   chr(97) -> 'a'
   ord('a') -> 97

- 임이의 진수를 10진수로
   int ('64', 10) -> 100
   int ('144', 8) -> 100

- 10진수에서 8, 16진수로
   hex(100) -> 10진수 100을 16진수 문자열로 '0x64'
   oct(100) -> 10진수 100을 8진수 문자열로 '0144'
And

집합자료형

|
- set, frozenset은 변겨불가능한 값들을 저장하는 순서가 없는 집합적 자료형이다
  순서가 없기때문에 슬라이싱, sort등을 사용할 수 없다
  예) set()      # 빈 set객체생성
       set([1,2,3,4,5,5])  # set([1,2,3,4,5]) 가 된다. 중복된것은 제거된다
       set('abbc')          # set(['a','b','c']) 가 된다.
       s.issubset(t)        # s가 t의 부분집합인가
       s.isuperset(t)       # s가 t의 포함집합인가
       s.intersection(t)    # s와 t의 교집합
       s.difference(t)      # s와 t의 차집합  s-t
       s.symmetric_difference(t)  # s와 t의 배타집합 s ^ t
       list(s)
       tuple(s)
       s.update(t)           # s에 t를 업데이트한다
       
And

사전

|

- 기본정의
   member = {'a':1, 'b':2, 'c':3}
   키가 없으면 새로 생성되고 키가 이미 존재하고 있으면 변경된다.
   키는 변경불가능한 문자열, 숫자, 튜플 이여야하고 값은 임의의 객체이다

- dict() 를 이용해서 사전생성하기
   dict (one=1, two=2) -> {'one':1, 'two':2}
   dict ( [('one', 1), ('two', 2)]) -> (key,value)쌍으로부터 사전을 생성한다

- 일반적인사전에 값 설정
   d = {}
   d['a'] = 10
   d[(1,2,3)] = 9

- zip()을 이용한 사전생성
   keys =['1', '2', '3']
   values = (1,2,3,)
   zip (keys, values) -> [('1',1), ('2',2), ('3',3)]
   dict (zip (keys, values)) -> 사전생성

- 함수를 값으로 사용하기
   def add(a,b):
        return a+b
   def sub(a,b):
        return a-b
   action = {0:add, 1:sub}
   action[0](4.5) -> add(4,5)호출과 동일
   action[1](5,3) -> sub(5,3)호출과 동일

- 메쏘드
   L={'a':1, 'b':2}
   L.keys() -> ['a','b']
   L.values() -> [1,2]
   L.items() -> [('a',1), ('b', 2)]
   'a' in L -> True    (멤버십테스트)

   사전의 복사
   C = L (사전 레퍼런스 복사, 사전은 공유된다)
   C = L.copy() (별도의 사전객체가 생성된다)

   L.get('a') -> 'a'에대한 값을 얻는다. L['a']와 같지만 해당 key값없을때 에러가나지 않고 None을 반환한다
   L.get('a',1212) -> 'a'의 키가 없을경우  1212를 반환한다
   L.setdefault('a', 111) -> 'a'키를 꺼내되 없으면 111로 value를 설정하고 반환
   L.popitem() -> 한아이템을 꺼낸다
   L.pop('a') -> 'a'에대한 레이블을 꺼낸다 (반환값은 value값)
   L.update(ph) -> ph사전을 L사전에 추가한다
   L.clear() -> 사전의 모든 내용을 삭제한다

- 심볼테이블
   globals() : 모든 전역영역의 심볼테이블을 반환
   locals()   : 모든 지역영역의 심볼테이블을 반환

   모든 객체는 심볼테이블을 가지고 있다.
   예) class c:
            x = 10
            y = 10
         c.__dict__ -> {'x':10, 'y'=10, '__module__':'__main__', '__doc__': None}

- 사전 for문으로 참조하기
   for key in L.keys():
        print L[key]
 
   for key in L:  --> 2.2버전이상부터 사용가능
   for key, value L.items():

- 사전을 리스트로 반환해서 정렬하기
   L = {'one' :1, 'two':2, 'three':3}
   temp = L.items()
   temp.sort()
   temp -> [('one',1), ('three', 3), ('two', 2) ]

   숫자를 기준으로 정렬하기
    temp = L.items()
    temp.sort(key=lamda item:item[1])

    정렬된결과를 한번만 사용할때
    for key, value in sorted(L.items(), key=lamda item:item[1]):
         printf key, value
  

And

튜플

|

- 리스트와 튜플 상호 변환
   T = (1,2,3,4,5)
   L = list (T)
   L -> [1,2,3,4,5]

   L = [1,2,3]
   T = tuple (L)
   T -> (1,2,3)

And

파일 목록 얻기

|

- 목록얻기
   ? : 임의의 문자 1개와 매칭
   * : 임의 개수의 모든 문자와 매칭
   [] : 괄호안의 임의의 1개문자와 매칭
   import glob
   glob.glob ('./[0-9].*') -> ['./1.gif', './2.txt']

- 파일의 추가 정보 얻기
   os.path.isfile(path) : path가 일반 파일이면 True
   os.path.isdir(path) : path가 디렉토리면 True
   os.path.islink(path) : path가 링크이면 True
   os.path.ismount(path) : path가 mount point이면 True
   os.path.exists(path) : path가 존재하면 True

   import glob
   import os
   flist = glob.glob('*')
   for fname in flist :
       if os.path.isfile(fname):
             print fname, '파일이다'

- 파일의 크기, 접근시간
   os.path.getsize('t.py') : t.py파일의 크기를 얻는다
   t = os.path.getatime('t.py') : t.py파일의 최근 접근 시간 (리턴되는 숫자는 1970년 1월1일자정부터 경과한초)
   time.ctime(t) : 문자열 시간으로 변경
   time.ctime(os.path.getmtime ('t.py')) : 파일의 수정시간
  
- 파일경로 관련함수
   p = os.path.abspath ('t.py') : 상대경로를 절대경로로
   os.path.split (p) : (head, tail)로 분리 (디렉토리명, 파일명)
   os.path.join ('/root', 'a.txt') -> /root/a.txt , 디렉토리와 파일명결합
   os.path.normpath ('/root/./t.txt') -> /root/t.txt', 파일명을 정규화한다
   os.path.splitext ('/root/t.txt') -> ('/root/t', '.txt') , 파일확자자명을 분리

And

명령행 인자 사용하기

|

- 명령행 인자 처리하기
   import sys
   print sys.argv

   예) python arg.py -l -a -v a b c
        -> ['arg.py', '-l', '-a', '-v', 'a', 'b', 'c']
        -> sys.argv[1:] 하면 인수들만 나온다

- 옵션처리하기
   옵션인수는 -로 시작한다
   getopt에서 c: 는 -c 뒤에 인자가 온다는 의미이다.
   import getopt
   args = '-a -b -c123 -d 456 a b c'.split()
   optlist, args = getopt.getopt (args, 'abc:d:')
   optlist -> [('-a', ''), ('-b',''), ('-c', '123'), ('-d', '456')]
   args   -> ['a', 'b', 'c']

And
prev | 1 | 2 | next