@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 그냥 경로를 쭉 나열하는게 더 보기좋고 직관적일 수도 있다.