반응형
안녕하세요? 일상의 코딩, 일코입니다.
두 번째 시간입니다.
지난 시간에는 한/글을 열지 않고도 첫 줄을 불러오는 함수를 소개해드렸습니다.
def 첫줄읽기(filepath):
"""한/글 문서 텍스트를 불러와서 엔터(\r\n)로 쪼갠 후 첫 번째 행 리턴"""
with OleFileIO(filepath) as ole: # 한/글 파일 불러오기
text = ole.openstream('PrvText').read().decode('UTF-16').split("\r\n")[0]
return text
이번에는 이 함수를 활용해서 파일들의 이름을 일괄 변경하는 프로그램을 만들어보겠습니다.
기존 파일목록은 아래와 같습니다.
GUI를 열어서 파일목록을 선택한 후,
선택한 파일들의 PrvText 첫 번째 라인을 불러와서(지난 포스팅 참조)
os.rename으로 파일이름을 변경하는 프로그램을 만들겠습니다.
설명이 필요없을 만큼 코드나 변수명이 굉장히 직관적이므로... 구체적인 설명은... 생략하겠습니다;;;
1. 파일목록을 선택하는 GUI를 만들어봅시다.
tkinter.filedialog의 askopenfilenames 메서드를 사용해보겠습니다.
import os
from tkinter import Tk
from tkinter.filedialog import askopenfilenames
def 파일목록선택():
"""
이름을 변경할 한/글 파일을 선택하는 함수.
파일명을 포함한 한/글 파일의 전체경로를 리스트로 리턴함
"""
root = Tk() # GUI 실행하고
filenames = askopenfilenames(title="이름을 변경할 한/글 파일을 선택해주세요.",
initialdir=os.getcwd(), # 실행한 위치
filetypes=[("한/글파일", "*.hwp *.hwpx")])
root.destroy() # GUI 종료
return filenames
간단히 위 코드를 콘솔에 입력하고 나서
파일목록선택 함수를 실행해봅시다.
파일목록선택 함수와 첫줄읽기 함수가 완성되었으니까,
2. 이제 이름바꾸기 함수를 만들어볼 차례입니다.
사실 이 함수는 파이썬 os모듈에서 기본으로 제공하고 있습니다. (os모듈을 사용한 폴더이름 일괄변경 예제)
위 괄호 안의 예제처럼 한/글 파일리스트 이름을 일괄변경하겠습니다.
파일경로리스트 = 파일목록선택() # GUI로 파일 선택 후 확인
for 파일 in 파일경로리스트:
첫줄 = 첫줄읽기(파일)
os.rename(파일, 파일.rsplit("/", maxsplit=1)[0] + f"/{첫줄}.hwp")
이대로 실행해보면(파일선택 GUI는 다른 영역에 있었습니다;)
그럼 이 코드를 함수로 조금만 다듬어보겠습니다.
def 일괄변경(파일경로리스트):
for 파일 in 파일경로리스트:
첫줄 = 첫줄읽기(파일)
os.rename(파일, 파일.rsplit("/", maxsplit=1)[0] + f"/{첫줄}.hwp")
우리가 필요로 하는 ①첫줄읽기, ②파일목록선택, ③일괄변경 까지 세 개의 함수를 아래와 같이 완성했습니다.
import os
from tkinter import Tk
from tkinter.filedialog import askopenfilenames
from olefile import OleFileIO
def 첫줄읽기(filepath):
"""한/글 문서 텍스트를 불러와서 엔터(\r\n)로 쪼갠 후 첫 번째 행 리턴"""
with OleFileIO(filepath) as ole: # 한/글 파일 불러오기
text = ole.openstream('PrvText').read().decode('UTF-16').split("\r\n")[0]
return text
def 파일목록선택():
"""
이름을 변경할 한/글 파일을 모두 선택하는 함수.
파일명을 포함한 한/글 파일의 전체경로를 리스트로 리턴함
"""
root = Tk() # GUI 실행하고
filenames = askopenfilenames(title="이름을 변경할 한/글 파일을 선택해주세요.",
initialdir=os.getcwd(), # 실행한 위치
filetypes=[("한/글파일", "*.hwp *.hwpx")])
root.destroy() # GUI 종료
return filenames
def 일괄변경(파일경로리스트):
for 파일 in 파일경로리스트:
첫줄 = 첫줄읽기(파일)
os.rename(파일, 파일.rsplit("/", maxsplit=1)[0] + f"/{첫줄}.hwp")
이제 다음 포스팅에서
실행되는 파트(main)를 만들고, pyinstaller로 컴파일까지 완성해봅시다.
긴 과정 잘 따라와주셨습니다. 금방 끝납니다.
다음 포스팅은,
반응형
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[Q&A](3/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법 (2) | 2022.01.14 |
---|---|
[Q&A](1/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법 (0) | 2022.01.14 |
한/글 매크로의 with (xxx) {yyy} 문법은 파이썬으로 어떻게 바꾸나요? (1) | 2022.01.03 |
댓글