http://bbs.python.or.kr 에서 더욱 많은 정보를 얻을 수 있습니다.
pickle을 이용해서 객체 저장하기
List 정렬하기
오름 차순으로 정렬할 때 : 1->2->3->...
Toggle line numbers
1 a = [['a',4],['b',1],['c',3],['d',2]]
2 a.sort(lambda x, y:cmp(x[1],y[1]))
내림 차순으로 정렬할 때 : 3->2->1->...
Toggle line numbers
1 a = [['a',4],['b',1],['c',3],['d',2]]
2 a.sort(lambda x, y:cmp(x[1],y[1]),reverse=True)
List
- Filtering 하기
[2, 18, 9, 22, 17, 24, 8, 12, 27] 에서 3으로 나눠서 0이 되는 것만 list로 만들기
Toggle line numbers
1 foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
2 print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
- 새 rule을 list에 적용해서 새로운 list 만들기
[2, 18, 9, 22, 17, 24, 8, 12, 27] 에서 각 member * 2 + 10의 값으로 list를 새로 만들기
Toggle line numbers
1 foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
2 print map(lambda x: x * 2 + 10, foo)
- 모두 더한 값 출력
[2, 18, 9, 22, 17, 24, 8, 12, 27] 를 모두 더한 결과를 출력한다.
Toggle line numbers
1 foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
2 print reduce(lambda x, y: x + y, foo)
- 각 member를 tab으로 붙인 값 출력
Toggle line numbers
1 print "\t".join(map(str,["hi","jae-seong"]))
- y라는 list에서 x에 해당하는 index를 갖는 값을 한꺼번에 갖고오기.
Toggle line numbers
1 x = [1,2]
2 y = [1,2,3,4,5,6]
3
4 [y[z] for z in x]
- list의 member들 끼리 그룹으로 묶기
Toggle line numbers
1 L1 = [1,2,3,4]
2 L2 = [0,2,12,20]
3 zip(L1, L2)
결과 : [(1, 0), (2, 2), (3, 12), (4, 20)]
- list의 member들 끼리 그룹으로 묶은 뒤, b에 해당하는 값이 10 이상인 녀석들만 뽑기
Toggle line numbers
1 L1 = [1,2,3,4]
2 L2 = [0,2,12,20]
3 [(a, b) for a, b in zip(L1, L2) if b > 10]
결과 : [(3, 12), (4, 20)]
Pipe
- python pipe read
sys.stdin.read() sys.stdin.readline() sys.stdin.readlines()
filter와 lambda 예제
- 디렉토리의 aln 확장자를 갖는 파일들을 읽어서 '_' 앞의 숫자를 1씩 줄여서 이름을 다시 붙임.
Toggle line numbers
1 for name in filter(lambda x: "aln" in x, os.listdir(".")):
2 pre = name[:name.find('_')]
3 post = name[name.find('_'):]
4 os.rename( name, "%d%s"%(int(pre)-1,post))
- 화일 이름 바꾸기 Script
Swissprot sequence 파일 읽기
- Swissprot sequence 파일을 읽어서 entry를 각각 파일로 저장
Toggle line numbers
1 import os
2 from Bio.SwissProt import SProt
3 from sys import *
4
5 fh = open(argv[1])
6 sp = SProt.Iterator(fh, SProt.RecordParser())
7
8
9 while 1:
10 record = sp.next()
11 if record is None:
12 break
13 file = open("swissprot//"+record.entry_name,"w")
14 file.write( ">" + record.entry_name + "\n")
15 file.write( record.sequence )
16 file.close()
17 fh.close()
파일 읽기
UnicodeEncodeError: 'ascii' codec can't encode character u'\ucc44' in position 105: ordinal not in range(128) 과 같은 오류시 대처 방안 ==> http://www.amk.ca/python/howto/unicode
파일 쓸 때
Toggle line numbers
1 import codecs
2 f = codecs.open('test', encoding='utf-8', mode='w+')
3 f.write(u'\u4500 blah blah blah\n')
4 f.close()
파일 읽을 때
Toggle line numbers
1 import codecs
2 f = codecs.open('unicode.rst', encoding='utf-8')
3 for line in f:
4 print repr(line)
- 한줄로 readme.txt를 빼고 나머지 txt확장자를 갖는 파일 리스트 갖고 오기
Toggle line numbers
1 [ x for x in glob.glob("*.txt") if x != "readme.txt" ]
- 디렉토리에서 *.fasta 파일을 갖고 오기
Toggle line numbers
1 import glob
2
3 glob.glob( "*.fasta" )
Python 프로그램 default format
- python 프로그램 default format
Toggle line numbers
1 #!/usr/local/bin/python2.4
2
3 import sys
4 from optparse import OptionParser
5
6 if __name__ == "__main__":
7 parser = OptionParser()
8 parser.add_option( "-i", dest="input" )
9 ( options, args ) = parser.parse_args()
10
11 if options.input == None:
12 parser.print_help()
13 sys.exit(-1)
python command output 받기
python generator example
Toggle line numbers
1 hprd_entries = list(x[:x.find("|")] for x in fasta.keys())
python string 출력 formatting
- 자신도 포함해서 5번째 칸 까지 출력하고 싶다면
Toggle line numbers
1 print "|%5s|" % "hi"
- 자신 부터 5번째 칸까지 출력하고 싶다면
Toggle line numbers
1 print "|%-5s|" % "hi"
Automation
Toggle line numbers
1 import win32com.client
2 o = win32com.client.Dispatch("Excel.Application")
3 o.Workbooks.Open(filepath)
4 o.visible = 1
Win32Com
- 현재 activation된 window에 text 써 넣기
Win32Clipboard
- 클립보드에서 text 갖고 오기
Toggle line numbers
1 from win32clipboard import *
2 OpenClipboard()
3 text = GetClipboardData(CF_TEXT)
4 CloseClipboard()
- 클립보드에 있는 내용에서 중복 없애기 (line 별로)
Toggle line numbers
1 from win32clipboard import *
2 OpenClipboard()
3 text = GetClipboardData(CF_TEXT)
4
5 aSet = set()
6 for line in text.split("\n"):
7 aSet.add( line.strip() )
8
9 output = ""
10 for line in aSet:
11 output += line
12 output += "\n"
13
14 SetClipboardText( output )
15 CloseClipboard()