혼자서 진행하고 있는 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)
반응형
'IT, Software > Python' 카테고리의 다른 글
Pycharm에서 Github에 Repository생성, 소스 업로드하기 (0) | 2021.02.10 |
---|---|
Python Pycharm(파이참)에서 Github 연동하기 (0) | 2021.02.08 |
Python PyQt로 윈도우 어플 만들기 - Thread 정보 UI에 업데이트하기 (0) | 2021.01.27 |
Python 코딩량 줄여주는 PyQt QT Designer 사용팁 (0) | 2021.01.25 |
Python OS 패키지 활용 윈도우 파일명 변경하기 (0) | 2021.01.22 |
댓글