문제:
DNA 서열 데이터 파일을 읽어와서, DNA 서열 데이터인지 확인한 후, A>T, T>A, C>G, G>C 변환이 이루어진 결과를 파일로 출력하는 파이썬 코드입니다.
import sys
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()
# A>T, T>A, C>G, G>C로 변환
def conversion(oneChar):
re_map = {'A': 'T', 'T': 'A', 'C': 'G', 'G': 'C'}
return re_map[oneChar]
# 인수로 파일 주소 받기 ==================================
file_path = sys.argv[1]
DNAStack = []
# 파일 확인
try:
with open(file_path, "r") as file:
line = file.readline()
if '#' in line :
while line:
line = removeBlank(file.readline())
if line:
checkDnaData(line)
# line => char로 쪼개서 stack에 저장
for char in line:
DNAStack.append(char)
else:
print("파일의 시작은 #이여야 합니다.")
exit()
#결과 파일 저장
with open('output2.txt', 'w') as f:
while len(DNAStack) != 0:
f.write(conversion(DNAStack.pop()))
print("정상 작동, output2.txt 파일로 저장 완료")
except IOError:
print("파일을 읽을 수 없습니다.")
exit()
DNA 서열 데이터 파일을 읽어와서, DNA 서열 데이터인지 확인한 후, A>T, T>A, C>G, G>C 변환이 이루어진 결과를 파일로 출력하는 파이썬 코드입니다.
- removeBlank 함수: 이 함수는 문자열에서 공백과 모든 개행문자(Whitespace)를 제거하고 대문자로 변환합니다. 이 함수는 문자열 데이터의 전처리(preprocessing)에 사용됩니다.
- checkDnaData 함수: 이 함수는 DNA 데이터인지 확인합니다. 만약 DNA 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
- conversion 함수: 이 함수는 A>T, T>A, C>G, G>C 변환이 이루어집니다. 해당 함수는 DNA 데이터를 서열 변환할 때 사용됩니다.
- 주요 코드: 인수로 파일 주소를 받아온 후, 파일의 내용을 한 줄씩 읽어들이며, 데이터 확인 후 변환 작업이 진행됩니다. 이 코드는 아래와 같이 작동합니다.
- 파일의 첫 번째 줄이 '#' 문자를 포함하는지 확인합니다. 만약 '#' 문자를 포함하지 않는다면, "파일의 시작은 #이여야 합니다." 메시지를 출력하고 프로그램을 종료합니다.
- 파일을 한 줄씩 읽어들이며, 해당 줄의 문자열이 DNA 서열 데이터인지 확인합니다. 만약 DNA 서열 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
- DNA 데이터일 경우, 문자열을 한 글자씩 쪼개어 스택에 저장합니다.
- 스택에서 한 글자씩 꺼내어 conversion 함수를 사용하여 변환작업을 진행합니다.
- 변환된 결과를 파일로 출력하고, "정상 작동, output2.txt 파일로 저장 완료" 메시지를 출력합니다.
- 파일 입출력 처리: 파일 입출력 처리는 'with open' 구문을 사용하여 처리합니다. 파일 입출력 처리 후, 파일을 자동으로 닫아주는 기능을 제공합니다. 이를 통해 파일 처리 중 예외 발생 시 파일을 안전하게 닫을 수 있습니다.
- 예외 처리: 파일 입출력 중 IOError가 발생할 경우 "파일을 읽을 수 없습니다." 메시지를 출력하고 프로그램을 종료합니다.
'2023 상반기 > 바이오 컴퓨팅' 카테고리의 다른 글
low-complexity regions(낮은 복잡도 영역) 과제 3-1 (0) | 2023.03.29 |
---|---|
re (정규표현식) 과제1 (0) | 2023.03.29 |
Algorithm (0) | 2023.03.29 |
Review of Algorithms2 (0) | 2023.03.22 |
Review of Algorithms (0) | 2023.03.21 |
댓글