본문 바로가기
IT, Software/Python

Python 특정 문자열을 찾아 텍스트 분할하는 코드

by 기타마을이장 2021. 2. 4.

혼자서 진행하고 있는 Python으로 윈도우 어플 만들기의 하나의 기능은

하나의 텍스트 파일안에서 특정한 문자열을 찾고

문자열과 문자열 사이를 파싱해서 개별 파일로 분할 저장해주는 기능이다.

예를 들어, 하나의 텍스트 파일이 아래와 같다면

1, 2, 3이 본문내용인 3개의 파일이 생성되도록 하는 기능이다.

특정 문자열을 만날때까지 텍스트를 분할하기

나도 어디서 찾았는지 모르겠지만 참고용 코드를 찾아서 활용한 거라 다 공개함.

split_file()

분할하고자 하는 파일경로와, 구분자, 파일을 쪼갤 때 붙일 숫자를 지정해서

split_file 함수를 호출하면

구분자를 만날때까지 버퍼링을 해두고, 다음 구분자를 만나면 그동안 버퍼링 된 문자열을 저장하기 위해

write_split_file 함수를 호출한다.

 

write_split_file()

write_split_file 함수에서는 

버퍼링된 문자열들을 받아 각각 파일로 저장한다.

저장할 때는 순서대로 1부터 순차로 카운트가 증가되어 파일면 맨 뒤에 붙이도록 했고

파일은 utf-8 BOM 타입으로 저장되도록 설정했다.

def write_split_file(src, count, lines):
    origName = src.replace('.txt','') # .txt 빼고 제목만 추출
    dstName = origName + '-' + str(count) + '.txt' # 제목 뒤에 붙이기

    with open(dstName, 'w', encoding='utf8') as fd:
        fd.write('\ufeff') # UTF-8 BOM 파입으로 저장하기 위한 추가
        fd.write("\n".join(lines))
        fd.close()

def split_file(src, delimeter, startIndex):
    lineList = []
    with open(src, 'r', encoding='utf-8') as ori_file:
        try :
            for line in ori_file :
                line = line.strip()
                if line.startswith(delimeter): # '####' 구분자 만남
                    write_split_file(src, startIndex, lineList)
                    lineList = []
                    lineList.append(line.split(delimeter)[1])
                    startIndex += 1 # 파일마다 1,2,3,4,5... 카운팅
                else: # 구분자 있는 line은 제외하고 텍스트 추가
                    lineList.append(line)
        except Exception as e:
            print(e)

        if lineList:
            write_split_file(src, startIndex, lineList)
            
split_file("D:\\Python\\workspace_python\\ToolBox\\data\\test.txt", "####", 1)

파일을 분할 저장한 결과

반응형

댓글