'프로그래밍 언어/파이썬'에 해당되는 글 17건
- 2011.10.06 python 설치시 dependency package 내려받기 (ubuntu)
- 2010.04.23 *args, **kwargs
- 2009.08.25 MySQLdb 사용하기
- 2008.03.27 파일
- 2008.03.27 객체의복사 및 형 변환
- 2008.03.25 집합자료형
- 2008.03.20 사전
- 2008.03.20 튜플
- 2008.03.20 파일 목록 얻기
- 2008.03.20 명령행 인자 사용하기
** 는 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)
설치 단계 : 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!!
- 파일쓰고 읽기
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() : 현재 위치 알려줌
레퍼런스복사 : 객체는 그대로 두고 객체를 참조하는 주소만 복사
실제객체 복사 : 실제 객체를 복사한다
- 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'
순서가 없기때문에 슬라이싱, 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를 업데이트한다
- 기본정의
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
- 리스트와 튜플 상호 변환
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)
- 목록얻기
? : 임의의 문자 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') , 파일확자자명을 분리
- 명령행 인자 처리하기
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']