" python(으)로 태그된 글들"

macOS에서 생성한 한글을 포함한 파일명이 Windows에서 자소 분리되어 보일때

2025-09-09   //   alexken작성   //   기술  //  No Comments

NFD Unicode 정규화로 파일명을 저장하는 macOS에서 생성한 한글을 포함한 파일명이, NFC Unicode 정규화를 사용하는 Windows에서 파명명이 자소가 분리되어 보일때

import os
import unicodedata

def convert_nfd_to_nfc(directory_path):
    """
    지정된 디렉토리 내의 모든 파일 및 폴더 이름을 NFD에서 NFC로 변환합니다.
    """
    for filename in os.listdir(directory_path):
        # 파일 이름이 NFD인지 확인
        nfd_filename = filename

        # NFC로 변환
        nfc_filename = unicodedata.normalize('NFC', nfd_filename)

        # 변환이 필요한 경우에만 이름 변경
        if nfd_filename != nfc_filename:
            old_path = os.path.join(directory_path, nfd_filename)
            new_path = os.path.join(directory_path, nfc_filename)
            print(f"변환: '{old_path}' -> '{new_path}'")

            # 실제 파일 이름 변경
            try:
                os.rename(old_path, new_path)
            except FileNotFoundError:
                print(f"오류: '{old_path}'를 찾을 수 없습니다.")

# 변환을 원하는 디렉토리 경로를 입력하세요.
# 예: convert_nfd_to_nfc('/Users/사용자이름/Documents/My_Files')
# macOS에서 터미널을 열고 'cd' 명령어로 변환할 폴더로 이동한 후 이 스크립트를 실행할 수 있습니다.
# 스크립트 실행 전, 중요한 파일이 있는 경우 백업을 권장합니다.

gemini2.5가 만들어 줌, 다음에 또 찾을 일 있을꺼 같아서 여기에 남겨둠

2 PDF에서 일부 페이지만 각각 발췌해서 머지하기

2020-05-28   //   alexken작성   //   기술  //  No Comments

업무상 서명해서 스캔한 PDF와 Office에서 PDF로 변환한 두 PDF 문서를 머지할 일이 잦아 배운적은 없지만 python으로 야매코딩.

macOS의 미리보기에서 필요한 페이지만 드래그해서 머지하는게 가장 깔끔한 방법이지만, Windows만 있는 환경에서 할 필요도 있어서 만듬

import sys
from PyPDF2 import PdfFileWriter, PdfFileReader

def usage():
    print("#" * 100)
    print('''
[PDFCAT] by alexken@TTA
A.pdf [a~b] + B.pdf [c~d] -> C.pdf

Usage:
    $ python {} A.pdf a b B.pdf c d
    '''.format(sys.argv[0]))
    print("#" * 100)

def merge_pdf(pdf_a, pdf_b):
    try:
        in_pdf_a = PdfFileReader(pdf_a["name"])
        in_pdf_b = PdfFileReader(pdf_b["name"])
        out_c = PdfFileWriter()

        if pdf_a["from"] == 0:
            pdf_a["from"] = 1
        if pdf_a["to"] == 0:
            pdf_a["to"] = in_pdf_a.getNumPages()
        if pdf_b["from"] == 0:
            pdf_b["from"] = 1
        if pdf_b["to"] == 0:
            pdf_b["to"] = in_pdf_b.getNumPages()

        for i in range(pdf_a["from"]-1, pdf_a["to"]):
            print( "{} page:{}".format(pdf_a["name"], i+1) )
            out_c.addPage(in_pdf_a.getPage(i))

        print( "+" )

        for i in range(pdf_b["from"]-1, pdf_b["to"]):  
            print( "{} page:{}".format(pdf_b["name"], i+1) )
            out_c.addPage(in_pdf_b.getPage(i))

        with open("C.pdf", "wb") as outputStream:
            out_c.write(outputStream)
    except:
        print(">>>> Fail to Merge")

if __name__ == "__main__":
    if len(sys.argv) == 7:
        merge_pdf({"name":sys.argv[1],"from":int(sys.argv[2]),"to":int(sys.argv[3])},
                  {"name":sys.argv[4],"from":int(sys.argv[5]),"to":int(sys.argv[6])})
    else:
        usage()