rules.txt์ ์ ํ ๊ท์น์ ๋ง์ถฐ ํ์ผ๋ช ์ ํ์ธํ ๋ค
์ด๋ ํด๋๋ก ๋ฐฐ์นํ ์ง ์๋ ค์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฐ๋ฐ ํ์ผ์ ๊ท์น์ ๋ง๊ฒ ๋ถ๋ฆฌํ์ง ๋ชปํ๋ค.
์ ๊ทธ๋ฐ๊ฑธ๊น?
1. ๋ฌธ์
- rules.txt
์ ๋ชฉ์ ๋ณด๊ณ ๊ฐ ํด๋๋ก ๋ถ๋ฅํ๋ ์์ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ท์น์ ์๋์ ๊ฐ๋ค.
school: ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ, ์์ ํ, ๊ธฐ์ฌ
study: ์คํ๋ง, ๊ฐ์, ๊ณต๋ถ, ๊ธฐ๋ณธํธ
project: project, api, test, lotto
์ค๋ฅธ์ชฝ์ ์ ์ ๋จ์ด๊ฐ ์์ผ๋ฉด ์ผ์ชฝ ํด๋๋ก ์ด๋ํ๋ ๋ฐฉ์์ด๋ค.
- ๊ฒฐ๊ณผํ๋ฉด

ํ์ผ๋ช ์ ์คํ๋ง์ด ์ ํ์๋๋ฐ, archive(๋ณด๊ดํจ) ํด๋๋ฅผ ์ถ์ฒํ๋ค๊ณ ๋งํ๋ค. ์ญ ๋ณด๋ฉด [ํ๊ทธ]๋ง ์ ํํ๊ฒ ๋ถ๋ฅํ๊ณ ๋๋จธ์ง๋ rules.txt๋ก ๋ถ๋ฅ๋์ง ์์๋ค๊ณ ํ๋ค. ์ ๊ทธ๋ฐ๊ฑธ๊น?
2. ์์ธ ๋ถ์
- ํ์ด์ฌ์ด ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ ๋, ๋์ ๋ณด์ด๋ ๊ธ์๋ ๊ฐ์๋ ์ปดํจํฐ ๋ด๋ถ์ ์ ๋์ฝ๋ ๊ฐ์ ๋ค๋ฅผ ์ ์๋ค.
- ๊ทธ๋์ ์ ๋ชฉ์ ์คํ๋ง์ด ์ ํ์์ด๋, ํ์ด์ฌ์ด ์ด๋ฅผ ๊ตฌ๋ณํด๋ด์ง ๋ชปํ๋ ๊ฒ์ผ๋ก ์ถ์ธกํ๋ค.
- ์ ๋์ฝ๋๋ ๋๊ฐ์ง์ ํํ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์๋ค.
- NFC (์์ฑํ) : '๊ฐ'๋ฅผ ํ๋์ ์์ฑ๋ ๊ธ์๋ก ์ฒ๋ฆฌํ๋ค.
- NFD (๋ถ๋ฆฌํ) : '๊ฐ'๋ฅผ 'ใฑ'+'ใ '์ ๊ฐ์ ์์๊ณผ ๋ชจ์์ผ๋ก ๋ถ๋ฆฌํด์ ์ฒ๋ฆฌํ๋ค. - rules.txt๋ NFC ์ํ๋ก ์ ์ฅ๋์ด ์์ ํ๋ฅ ์ด ๋๋ค.
- ํ์ง๋ง ํ์ด์ฌ์ด ํ์ผ ์์คํ ์ ์ฝ์ด์จ ํ์ผ๋ช ์ NFD ํํ๋ก ์ฝํ ๊ฒ ๊ฐ๋ค.
3. ์ฝ๋ ์์
- classifier.py
unicodedata๋ฅผ ์ถ๊ฐํ๋ค.
import unicodedata
def normalize_text(text):
"""
ํ๊ธ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํด ๋ฌธ์์ด ํํ๋ฅผ ํต์ผํ๋ ํจ์
macOS์์๋ ํ์ผ๋ช
์ ํ๊ธ์ด ์๋ชจ ๋ถ๋ฆฌ๋ ํํ๋ก ๋ค์ด์ฌ ์ ์๋ค.
์:
์คํ๋ง
แแ
ณแแ
ณแ
แ
ตแผ
์ฌ๋์ด ๋ณด๊ธฐ์๋ ๊ฐ์ง๋ง ์ปดํจํฐ๋ ๋ค๋ฅด๊ฒ ๋ณผ ์ ์์ผ๋ฏ๋ก,
NFC ํํ๋ก ํต์ผํ ๋ค ์๋ฌธ์๋ก ๋ฐ๊ฟ ๋น๊ตํ๋ค.
"""
return unicodedata.normalize("NFC", text).lower()
def classify_by_rules(file_path, rules, destination_folder_names):
"""
rules.txt ๊ท์น์ ๋ณด๊ณ ์ด๋ํ ํด๋๋ฅผ ์ถ์ฒํ๋ ํจ์
์กฐ๊ฑด:
1. ํ์ผ๋ช
์์ rules.txt์ ํค์๋๊ฐ ํฌํจ๋์ด ์์ด์ผ ํ๋ค.
2. ๊ท์น์ ํด๋ ์ด๋ฆ์ด ์ค์ ์ด๋ ๋ชฉ์ ์ง ํด๋์ ์กด์ฌํด์ผ ํ๋ค.
"""
filename = file_path.name
# macOS ํ๊ธ ํ์ผ๋ช
๋น๊ต๋ฅผ ์ํด ์ ๊ทํํ๋ค.
normalized_filename = normalize_text(filename)
for folder_name, keywords in rules.items():
# ์ค์ ํด๋๊ฐ ์๋ ๊ท์น์ ์ฌ์ฉํ์ง ์๋๋ค.
if folder_name not in destination_folder_names:
continue
for keyword in keywords:
normalized_keyword = normalize_text(keyword)
if normalized_keyword in normalized_filename:
return {
"filename": filename,
"targetFolder": folder_name,
"reason": f"ํ์ผ๋ช
์ rules.txt ํค์๋ '{keyword}'๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.",
"source": "RULES_TXT",
}
return None
- ๋ค์ ์คํ
์ด์ ์ ๋ถ๋ฅํ๋ค!
