문제:
DNA 서열 데이터 파일을 읽어와서, DNA 서열 데이터인지 확인한 후, T를 U로 변환한 결과를 파일로 출력하는 파이썬 코드입니다.
import sys
import queue
import re
# 문자열의 공백과 모든 개행문자(Whitespace)를 제거하고 대문자로 변환
def removeBlank(oneLine):
return re.sub("\s+","",oneLine).upper()
# ATGC 로 이루어진 문자열인지 확인
def checkDnaData(oneLine):
if re.match("^(A|T|G|C)+$", oneLine):
return
else:
print(oneLine +" 이 DNA데이터가 아닙니다.")
exit()
# U를 T로 변환
def conversion(oneLine):
return re.sub('T', 'U', oneLine)
# 인수로 파일 주소 받기 ==================================
file_path = sys.argv[1]
DNAdataQ = queue.Queue()
# 파일 확인
try:
with open(file_path, "r") as file:
line = file.readline()
if '#' in line :
while line:
line = removeBlank(file.readline())
if line:
checkDnaData(line)
DNAdataQ.put(line)
else:
print("파일의 시작은 #이여야 합니다.")
exit()
#결과 파일 저장
with open('output.txt', 'w') as f:
while not DNAdataQ.empty():
f.write(conversion(DNAdataQ.get()))
except IOError:
print("파일을 읽을 수 없습니다.")
exit()
- removeBlank 함수: 이 함수는 문자열에서 공백과 모든 개행문자(Whitespace)를 제거하고 대문자로 변환합니다. 이 함수는 문자열 데이터의 전처리(preprocessing)에 사용됩니다.
- checkDnaData 함수: 이 함수는 DNA 데이터인지 확인합니다. 만약 DNA 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
- conversion 함수: 이 함수는 T를 U로 변환합니다. 해당 함수는 RNA 데이터를 DNA 데이터로 변환할 때 사용됩니다.
- 주요 코드: 인수로 파일 주소를 받아온 후, 파일의 내용을 한 줄씩 읽어들이며, 데이터 확인 후 변환 작업이 진행됩니다. 이 코드는 아래와 같이 작동합니다.
- 파일의 첫 번째 줄이 '#' 문자를 포함하는지 확인합니다. 만약 '#' 문자를 포함하지 않는다면, "파일의 시작은 #이여야 합니다." 메시지를 출력하고 프로그램을 종료합니다.
- 파일을 한 줄씩 읽어들이며, 해당 줄의 문자열이 DNA 서열 데이터인지 확인합니다. 만약 DNA 서열 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
- DNA 데이터일 경우, DNA 데이터를 큐(Queue)에 저장합니다.
- 큐에서 DNA 데이터를 하나씩 꺼내어 conversion 함수를 사용하여 변환작업을 진행합니다.
- 변환된 결과를 파일로 출력하고, "정상 작동, output.txt 파일로 저장 완료" 메시지를 출력합니다.
- 파일 입출력 처리: 파일 입출력 처리는 'with open' 구문을 사용하여 처리합니다. 파일 입출력 처리 후, 파일을 자동으로 닫아주는 기능을 제공합니다. 이를 통해 파일 처리 중 예외 발생 시 파일을 안전하게 닫을 수 있습니다.
- 예외 처리: 파일 입출력 중 IOError가 발생할 경우 "파일을 읽을 수 없습니다." 메시지를 출력하고 프로그램을 종료합니다.
'2023 상반기 > 바이오 컴퓨팅' 카테고리의 다른 글
dynamic programming (동적 계획법) Manhattan Tourist problem(MTP), Longest Common Subsequences (LCS) (0) | 2023.04.04 |
---|---|
low-complexity regions(낮은 복잡도 영역) 과제 3-1 (0) | 2023.03.29 |
re(정규 표현식) 과제2 (0) | 2023.03.29 |
Algorithm (0) | 2023.03.29 |
Review of Algorithms2 (0) | 2023.03.22 |
댓글