메인
투자 노트

JSON으로 Path관리하기

@8/17/2022
웹 서버나 기타 소프트웨어 개발 시 파일을 많이 다루거나 URL 관리가 필요하 경우 아래와 같이 JSON으로 경로를 정의해서 관리할 수 있는 방법이다.
“user/image/profile.jpeg” 이런거 문자열로 일일이 쓰지 말자

JSON으로 Path 정의

파일 디렉토리 URL 등 하여튼 path가 필요하면 가리지 않고 모두 활용 가능함
{ "upload": { "image": { "origin": "original_image_dir", # 요런건 디렉토리 경로 "compressed": "compressed_image_dir", "thumbnail": "thumbnail_image_dir" }, "refer": { "image": "refer_image_dir", "video": "refer_video_dir", "document": "refer_document_dir" }, "video": "video_dir" }, "file": { "setting": { "main.txt": "setting_file", # 요런건 파일 경로 "config.json": "config_file" } } }
JSON
복사
path.json
original_image_dir → upload/image/origin setting_file → file/setting/main.txt
한곳에 모아놓고 관리할 수 있으며 수정도 용이하기 때문에 정말 편하다.

경로 탐색 함수

함수는 이렇게 생겼다
import json from pathlib import Path def path(json_path,filename: str) -> Path: """객체가 저장되어야 할 경로나 디렉토리를 반환합니다.""" root = dict(json.load(open(json_path))) path_container = [] # correct_path함수가 호출되는 시점에 메모리를 초기화시켜야 함 def _search(obj_type, path: list = path_container, root: dict = root) -> list: for key, value in root.items(): path.append(key) if isinstance(value, dict) and (result := _search(obj_type, path=path, root=value)): return result elif value == obj_type: return path else: path.remove(key) return Path(*_search(filename))
Python
복사
func.py
재귀 호출을 통해서 탐색하며 path_container에 현재 탐색 위치에 도달하기 위한 최단 경로만 남겨놓는다. 목표 key에 도달하면 그대로 최단 경로를 반환한다.

사용

그냥 이렇게 쓰면 된다
from func import path refer_video_dir = path(json_path="path.json",filename="refer_video_dir") print(refer_video_dir) # upload/refer/video
Python
복사
main.py
2023.01.16 그냥 경로를 쭉 나열하는게 더 보기좋고 직관적일 수도 있다.