HTML Date 참조 디렉토리명 변경 파이썬 스크립트

파이썬 스크립트를 상징하는 일러스트레이션

HTML Date 참조 디렉토리명 변경 파이썬 스크립트

1. 필요 라이브러리 설치

$ pip show beautifulsoup4 // 파이썬 BeautifulSoup4 라이브러리 설치확인
WARNING: Package(s) not found: beautifulsoup4

$ pip install beautifulsoup4 // 파이썬 BeautifulSoup4 라이브러리 설치
Defaulting to user installation because normal site-packages is not writeable
Collecting beautifulsoup4
Downloading beautifulsoup4-4.14.2-py3-none-any.whl.metadata (3.8 kB)
Collecting soupsieve>1.2 (from beautifulsoup4)
Downloading soupsieve-2.8-py3-none-any.whl.metadata (4.6 kB)
Collecting typing-extensions>=4.0.0 (from beautifulsoup4)
Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB)
Downloading beautifulsoup4-4.14.2-py3-none-any.whl (106 kB)
Downloading soupsieve-2.8-py3-none-any.whl (36 kB)
Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB)
Installing collected packages: typing-extensions, soupsieve, beautifulsoup4

Successfully installed beautifulsoup4-4.14.2 soupsieve-2.8 typing-extensions-4.15.0

2. 스트립트 내용

import os
import re
from bs4 import BeautifulSoup

# 기준 루트 디렉토리
root_dir = r"D:\dev\www\content\_working"

def extract_date_from_html(html_path):
    """HTML 파일에서 date 정보를 추출"""
    try:
        with open(html_path, "r", encoding="utf-8") as f:
            soup = BeautifulSoup(f, "html.parser")

            # <meta name="date" content="2025-08-22"> 같은 경우
            meta_date = soup.find("meta", attrs={"name": "date"})
            if meta_date and meta_date.get("content"):
                return meta_date["content"].strip()

            # <time datetime="2025-08-22"> 같은 경우
            time_tag = soup.find("time")
            if time_tag and time_tag.get("datetime"):
                return time_tag["datetime"].strip()

            # 패턴 매칭 (본문에 YYYY-MM-DD 형태가 있을 경우)
            text = soup.get_text()
            match = re.search(r"\d{4}-\d{2}-\d{2}", text)
            if match:
                return match.group(0)
    except Exception as e:
        print(f"Error reading {html_path}: {e}")
    return None

for folder in os.listdir(root_dir):
    old_path = os.path.join(root_dir, folder)
    if os.path.isdir(old_path):
        # 디렉토리 안의 첫 번째 html 파일 찾기
        html_files = [f for f in os.listdir(old_path) if f.endswith(".html")]
        if html_files:
            html_path = os.path.join(old_path, html_files[0])
            date_str = extract_date_from_html(html_path)
            if date_str:
                new_name = date_str
                new_path = os.path.join(root_dir, new_name)
                if old_path != new_path:
                    print(f"Renaming: {old_path} -> {new_path}")
                    os.rename(old_path, new_path)

3. 스크립트 실행

$ python rename-folders.py --dry-run // --dry-run는 테스트를 위해 미리실행
10   2024-08-25 ꯰ Ϸ
101  2025-07-07 ꯰ Ϸ
103  2025-07-07-1 ꯰ Ϸ
104  2025-07-07-2 ꯰ Ϸ
105  2025-07-07-3 ꯰ Ϸ
107  2025-07-07-4 ꯰ Ϸ
108  2025-07-07-5 ꯰ Ϸ
109  2025-07-07-6 ꯰ Ϸ
11  2024-08-25-1 ꯰ Ϸ
110  2025-07-07-7 ꯰ Ϸ
111  2025-07-07-8 ꯰ Ϸ
112  2025-07-07-9 ꯰ Ϸ
113  2025-07-07-10 ꯰ Ϸ
114  2025-07-07-11 ꯰ Ϸ
115  2025-07-07-12 ꯰ Ϸ
116  2025-07-07-13 ꯰ Ϸ
119  2025-07-07-14 ꯰ Ϸ
12  2024-08-25-2 ꯰ Ϸ
120  2025-07-08 ꯰ Ϸ
121  2025-07-08-1 ꯰ Ϸ
122  2025-07-08-2 ꯰ Ϸ
124  2025-07-09 ꯰ Ϸ
125  2025-07-09-1 ꯰ Ϸ
126  2025-07-09-2 ꯰ Ϸ
128  2025-07-11 ꯰ Ϸ
13  2024-08-25-3 ꯰ Ϸ
130  2025-07-11-1 ꯰ Ϸ
131  2025-07-12 ꯰ Ϸ
133  2025-07-15 ꯰ Ϸ
134  2025-07-15-1 ꯰ Ϸ
137  2025-07-16 ꯰ Ϸ
138  2025-07-17 ꯰ Ϸ
139  2025-07-18 ꯰ Ϸ
14  2024-08-26 ꯰ Ϸ
140  2025-07-20 ꯰ Ϸ
141  2025-07-21 ꯰ Ϸ
142  2025-07-21-1 ꯰ Ϸ
143  2025-07-23 ꯰ Ϸ
144  2025-07-23-1 ꯰ Ϸ
145  2025-07-24 ꯰ Ϸ
146  2025-07-25 ꯰ Ϸ
147  2025-07-26 ꯰ Ϸ
148  2025-07-27 ꯰ Ϸ
149  2025-07-28 ꯰ Ϸ
150  2025-07-29 ꯰ Ϸ
151  2025-07-30 ꯰ Ϸ
152  2025-07-31 ꯰ Ϸ
153  2025-07-31-1 ꯰ Ϸ
154  2025-08-01 ꯰ Ϸ
155  2025-08-04 ꯰ Ϸ
156  2025-08-04-1 ꯰ Ϸ
157  2025-08-05 ꯰ Ϸ
158  2025-08-05-1 ꯰ Ϸ
159  2025-08-06 ꯰ Ϸ
16  2024-08-26-1 ꯰ Ϸ
160  2025-08-07 ꯰ Ϸ
161  2025-08-08 ꯰ Ϸ
162  2025-08-09 ꯰ Ϸ
163  2025-08-10 ꯰ Ϸ
164  2025-08-11 ꯰ Ϸ
165  2025-08-13 ꯰ Ϸ
166  2025-08-13-1 ꯰ Ϸ
167  2025-08-14 ꯰ Ϸ
168  2025-08-15 ꯰ Ϸ
169  2025-08-16 ꯰ Ϸ
17  2024-08-26-2 ꯰ Ϸ
170  2025-08-16-1 ꯰ Ϸ
171  2025-08-17 ꯰ Ϸ
172  2025-08-18 ꯰ Ϸ
173  2025-08-19 ꯰ Ϸ
174  2025-08-20 ꯰ Ϸ
175  2025-08-20-1 ꯰ Ϸ
176  2025-08-21 ꯰ Ϸ
177  2025-08-21-1 ꯰ Ϸ
178  2025-08-22 ꯰ Ϸ
179  2025-08-27 ꯰ Ϸ
18  2024-08-28 ꯰ Ϸ
180  2025-08-27-1 ꯰ Ϸ
181  2025-08-27-2 ꯰ Ϸ
182  2025-08-27-3 ꯰ Ϸ
183  2025-08-27-4 ꯰ Ϸ
184  2025-08-28 ꯰ Ϸ
185  2025-08-29 ꯰ Ϸ
186  2025-09-01 ꯰ Ϸ
187  2025-09-02 ꯰ Ϸ
188  2025-09-03 ꯰ Ϸ
189  2025-09-03-1 ꯰ Ϸ
19  2024-08-29 ꯰ Ϸ
190  2025-09-03-2 ꯰ Ϸ
191  2025-09-03-3 ꯰ Ϸ
192  2025-09-04 ꯰ Ϸ
193  2025-09-04-1 ꯰ Ϸ
194  2025-09-09 ꯰ Ϸ
20  2024-09-03 ꯰ Ϸ
21  2024-09-18 ꯰ Ϸ
22  2024-09-18-1 ꯰ Ϸ
23  2024-09-18-2 ꯰ Ϸ
24  2024-09-18-3 ꯰ Ϸ
25  2024-09-18-4 ꯰ Ϸ
26  2024-09-18-5 ꯰ Ϸ
27  2024-09-18-6 ꯰ Ϸ
28  2024-09-18-7 ꯰ Ϸ
29  2024-09-18-8 ꯰ Ϸ
3  2024-08-07 ꯰ Ϸ
30  2024-09-18-9 ꯰ Ϸ
31  2024-09-18-10 ꯰ Ϸ
32  2024-09-18-11 ꯰ Ϸ
33  2024-09-18-12 ꯰ Ϸ
34  2024-09-18-13 ꯰ Ϸ
35  2024-09-18-14 ꯰ Ϸ
36  2024-09-18-15 ꯰ Ϸ
37  2024-09-18-16 ꯰ Ϸ
38  2024-09-18-17 ꯰ Ϸ
39  2024-09-18-18 ꯰ Ϸ
4  2024-08-07-1 ꯰ Ϸ
40  2024-09-18-19 ꯰ Ϸ
41  2024-09-18-20 ꯰ Ϸ
42  2024-09-18-21 ꯰ Ϸ
44  2024-09-18-22 ꯰ Ϸ
45  2024-09-18-23 ꯰ Ϸ
46  2024-09-18-24 ꯰ Ϸ
47  2025-02-03 ꯰ Ϸ
49  2025-02-17 ꯰ Ϸ
5  2024-08-12 ꯰ Ϸ
50  2025-02-17-1 ꯰ Ϸ
51  2025-02-17-2 ꯰ Ϸ
52  2025-02-17-3 ꯰ Ϸ
53  2025-02-17-4 ꯰ Ϸ
54  2025-02-17-5 ꯰ Ϸ
55  2025-02-17-6 ꯰ Ϸ
56  2025-02-17-7 ꯰ Ϸ
57  2025-02-18 ꯰ Ϸ
58  2025-02-19 ꯰ Ϸ
59  2025-05-25 ꯰ Ϸ
6  2024-08-12-1 ꯰ Ϸ
61  2025-06-02 ꯰ Ϸ
62  2025-06-24 ꯰ Ϸ
63  2025-06-24-1 ꯰ Ϸ
64  2025-06-24-2 ꯰ Ϸ
65  2025-06-24-3 ꯰ Ϸ
66  2025-06-24-4 ꯰ Ϸ
67  2025-06-24-5 ꯰ Ϸ
7  2024-08-12-2 ꯰ Ϸ
73  2025-07-04 ꯰ Ϸ
74  2025-07-04-1 ꯰ Ϸ
75  2025-07-04-2 ꯰ Ϸ
76  2025-07-04-3 ꯰ Ϸ
77  2025-07-04-4 ꯰ Ϸ
78  2025-07-04-5 ꯰ Ϸ
79  2025-07-04-6 ꯰ Ϸ
8  2024-08-13 ꯰ Ϸ
80  2025-07-04-7 ꯰ Ϸ
81  2025-07-04-8 ꯰ Ϸ
82  2025-07-04-9 ꯰ Ϸ
83  2025-07-04-10 ꯰ Ϸ
85  2025-07-06 ꯰ Ϸ
86  2025-07-06-1 ꯰ Ϸ
87  2025-07-06-2 ꯰ Ϸ
89  2025-07-06-3 ꯰ Ϸ
9  2024-08-16 ꯰ Ϸ
90  2025-07-06-4 ꯰ Ϸ
95  2025-07-06-5 ꯰ Ϸ
98  2025-07-06-6 ꯰ Ϸ
99  2025-07-06-7 ꯰ Ϸ

【참고자료】