본문 바로가기
아래아한글 자동화/python+hwp 중급

[Q&A](2/3) 제목을 {문서첫줄}.hwp로 저장하는 가장 쿨한 방법

by 일코 2022. 1. 14.

안녕하세요? 상의 딩, 일코입니다.

두 번째 시간입니다.

 

지난 시간에는 한/글을 열지 않고도 첫 줄을 불러오는 함수를 소개해드렸습니다.

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로 컴파일까지 완성해봅시다.

긴 과정 잘 따라와주셨습니다. 금방 끝납니다.

 

다음 포스팅은,

 

[Q&A] hwp파일을 페이지별로 나눈 후, 제목을 {문서첫줄}.hwp로 저장하는 가장 간단한 방법[3/3]

안녕하세요? 일상의 코딩, 일코입니다. 마지막, 세 번째 시간입니다. 지난 시간까지 진행하면서 ①파일목록을 GUI로 선택하고, ②(한/글을 열지 않고도)첫 줄을 불러와서, ③파일이름을 바꾸는

martinii.fun

 

댓글