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

re (정규표현식) 과제1

by concho 2023. 3. 29.

문제:

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

댓글