본문 바로가기
2023 상반기/바이오 컴퓨팅

re(정규 표현식) 과제2

by concho 2023. 3. 29.

문제:

 

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 변환이 이루어진 결과를 파일로 출력하는 파이썬 코드입니다.

  1. removeBlank 함수: 이 함수는 문자열에서 공백과 모든 개행문자(Whitespace)를 제거하고 대문자로 변환합니다. 이 함수는 문자열 데이터의 전처리(preprocessing)에 사용됩니다.
  2. checkDnaData 함수: 이 함수는 DNA 데이터인지 확인합니다. 만약 DNA 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
  3. conversion 함수: 이 함수는 A>T, T>A, C>G, G>C 변환이 이루어집니다. 해당 함수는 DNA 데이터를 서열 변환할 때 사용됩니다.
  4. 주요 코드: 인수로 파일 주소를 받아온 후, 파일의 내용을 한 줄씩 읽어들이며, 데이터 확인 후 변환 작업이 진행됩니다. 이 코드는 아래와 같이 작동합니다.
  • 파일의 첫 번째 줄이 '#' 문자를 포함하는지 확인합니다. 만약 '#' 문자를 포함하지 않는다면, "파일의 시작은 #이여야 합니다." 메시지를 출력하고 프로그램을 종료합니다.
  • 파일을 한 줄씩 읽어들이며, 해당 줄의 문자열이 DNA 서열 데이터인지 확인합니다. 만약 DNA 서열 데이터가 아니라면, 해당 서열이 DNA 데이터가 아니라는 메시지를 출력하고 프로그램을 종료합니다.
  • DNA 데이터일 경우, 문자열을 한 글자씩 쪼개어 스택에 저장합니다.
  • 스택에서 한 글자씩 꺼내어 conversion 함수를 사용하여 변환작업을 진행합니다.
  • 변환된 결과를 파일로 출력하고, "정상 작동, output2.txt 파일로 저장 완료" 메시지를 출력합니다.
  1. 파일 입출력 처리: 파일 입출력 처리는 'with open' 구문을 사용하여 처리합니다. 파일 입출력 처리 후, 파일을 자동으로 닫아주는 기능을 제공합니다. 이를 통해 파일 처리 중 예외 발생 시 파일을 안전하게 닫을 수 있습니다.
  2. 예외 처리: 파일 입출력 중 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

댓글