패치 내역
공통
이제 몇 번 자르는지도 세줍니다.
Cutter
Cut수에 따른 효소 리스트 업 기능이 추가되었습니다. 살려줘… (아직 자르는 위치 안했음)
파일 이름 형식이 변경되었습니다. 그래서 이제 시퀀스 이름도 받습니다.
Finder
Cut수 세 주는 기능에 따른 출력 형식 수정이 있었습니다.
기능 추가하는 세부 과정
Cut수 세 주는 기능
(생략)
if res_find in sequence:
site_count = 0
while sequence.find(res_find) != -1:
loc = sequence.find(res_find)
site_count += 1
sequence = sequence[loc+len(res_find):]
print(enzyme, res_find, sequence.find(res_find))
f.write("{0}: {1} {2},{3} times cut.\n".format(enzyme,res_find,feature,site_count))
(생략)
전에 백준 풀 때 사용했던 방법(그룹 단어 찾기)을 응용한건데, 이 코드가 단식으로는 되는데 저대로 코드 안에 넣으니까 restriction site가 없는 효소를 만나면 반복문이 중단되어버린다.
def count_site (a,b):
site_count = 0
while a in b:
loc - b.find(a)
site_count += 1
b = b[loc+len(a):]
return site_count
그래서 아예 함수로 빼버렸다.
(마른세수) 아 잠깐만요… 시퀀스 1kb짜리라고…
def count_site (a,b):
site_count = 0
while a in b:
loc = b.find(a)
site_count += 1
b = b[loc+len(a):]
return site_count
응? 네번째 줄에 오타가 있었네? (원래 =가 맞는데 -가 들어감)
(마른세수 2)
def count_func (a,b):
site_count = 0
while a in b:
loc = b.find(a)
site_count += 1
b = b[loc+len(a):]
return site_count
# 이거 통으로 코드에 넣었더니 if 안에 있는데도 시퀀스 없으면 끝내더라...
print(count_site("GGCC",sequence))
답답해서 직접 해봤더니 이건 잘됐다.
def count_func (a,b):
while a in b:
global site_count
loc = b.find(a)
site_count += 1
b = b[loc+len(a):]
return site_count
# 이거 통으로 코드에 넣었더니 if 안에 있는데도 시퀀스 없으면 끝내더라...
(생략)
if res_find in sequence:
site_count = 0
count_func(res_find,sequence)
count += 1
f.write("{0}: {1} {2},{3} times cut.\n".format(enzyme,res_find,feature,site_count))
else:
count += 0
(생략)
# 여러분 드디어 저장기능이 추가되었습니다!!!
site_count라는 변수가 해당 변수인데, 아예 함수 안에서는 전역변수로 선언하고 밖으로 빼버렸다. 그래서 코드를 보면 함수 안에는 global ~가 있고, ~에 해당하는 변수가 if문과 함수 사이에 있다. (if문 바로 아래)
(매우 바람직)
cut수별로 나눠주는 기능
(생략)
if res_find in sequence:
site_count = 0
count_func(res_find,sequence)
count += 1
count_nocut += 0
cut_list.append(enzyme)
f.write("{0}: {1} {2},{3} times cut.\n".format(enzyme,res_find,feature,site_count))
else:
count += 0
count_nocut += 1
nocut_list.append(enzyme)
cut_list = ', '.join(cut_list)
nocut_list = ', '.join(nocut_list)
f.write("Total: {0} enzymes cut input sequence, {1} enzymes never cut this sequence. \n".format(count,count_nocut))
f.write("Enzyme cuts: {0} \nEmzyme no cuts: {1}".format(cut_list,nocut_list))
f.close()
# 진짜 세주는거 겨우 추가했습니다...ㅠㅠ
사실 길어서 생략했는데, 코드 윗부분에 0컷이랑 컷 리스트가 있다.
count = 0
count_nocut = 0
cut_list = []
nocut_list = []
저기서 count는 기존에 있던 변수고 밑에 세 개가 신규 변수.
그래서 이렇게 나오는데… 이게 사람이요… 살다보면 1컷 궁금하잖음?
count = 0
count_nocut = 0
once_cut_list = []
multi_cut_list = []
nocut_list = []
(생략)
if res_find in sequence:
site_count = 0
count_func(res_find,sequence)
count += 1
count_nocut += 0
if site_count == 1:
once_cut_list.append(enzyme)
else:
multi_cut_list.append(enzyme)
f.write("{0}: {1} {2},{3} times cut.\n".format(enzyme,res_find,feature,site_count))
else:
count += 0
count_nocut += 1
nocut_list.append(enzyme)
once_cut_list = ', '.join(once_cut_list)
multi_cut_list = ', '.join(multi_cut_list)
nocut_list = ', '.join(nocut_list)
(생략)
그럼 0컷 1컷 멀티컷 나눠드렸습니다.
근데… 에픽하이도 투컷이 있고… NEB cutter도 2컷 보여주는데… 씁… 아니 진짜 이것만 보여줄거임?
count = 0
count_nocut = 0
once_cut_list = []
two_cut_list = []
multi_cut_list = []
nocut_list = []
(생략)
if res_find in sequence:
site_count = 0
count_func(res_find,sequence)
count += 1
count_nocut += 0
if site_count == 1:
once_cut_list.append(enzyme)
elif site_count == 2:
two_cut_list.append(enzyme)
else:
multi_cut_list.append(enzyme)
f.write("{0}: {1} {2},{3} times cut.\n".format(enzyme,res_find,feature,site_count))
else:
count += 0
count_nocut += 1
nocut_list.append(enzyme)
(생략)
그래서 나눠드렸습니다^^
with open ('Result_{0}-{1}-{2}_{3}-{4}.txt'.format(year,month,day,enzyme,sequence_name),'w',encoding='utf-8') as f:
if sequence.find(res_find) != -1:
site_count = 0
cut_count = count_func(res_find,sequence)
sequence = sequence.replace(res_find,res_site)
print(enzyme,",",cut_feature)
print(sequence,cut_count)
f.write("{0} | {1} | {2} | {3} times cut\n".format(enzyme,res_site,cut_feature,cut_count))
f.write('Sequence name: {0} \n {1}'.format(sequence_name,sequence))
f.close()
# DB에 효소가 있고 일치하는 시퀀스가 있을 때
참고로 위 함수는 Finder에도 적용되었다. 단, Finder의 경우 DB에 효소가 있고 일치하는 시퀀스가 있을 때 cut수를 세 준다.
이런 식. (HaeIII이 6컷인가 그랬음)
Reply