81 lines
3.9 KiB
Python
81 lines
3.9 KiB
Python
import re, json
|
|
|
|
def find_codes(base_categories, json_data):
|
|
results = [] # 각 카테고리에 대한 결과를 저장할 리스트
|
|
|
|
for base_category in base_categories:
|
|
category_parts = re.split(r'>|-', base_category)
|
|
base_category1Name, base_category2Name, base_category3Name, base_category4Name = (category_parts + [""] * 4)[:4]
|
|
|
|
for item in json_data:
|
|
if (item.get('category1Name') == base_category1Name and
|
|
item.get('category2Name') == base_category2Name and
|
|
(item.get('category3Name') == base_category3Name or item.get('category3Name') == "") and
|
|
(item.get('category4Name') == base_category4Name or item.get('category4Name') == "")):
|
|
results.append((item['Naver_code'], item.get('cat_code'))) # 조건에 맞는 항목을 결과에 추가
|
|
break # 해당 카테고리에 대한 첫 번째 매칭 항목을 찾은 후 다음 카테고리로 이동
|
|
|
|
return results # 모든 검색 결과 반환
|
|
|
|
def loadJsonData():
|
|
json_data = []
|
|
try:
|
|
with open("Percenty_SS_Code.json", "r", encoding='utf-8') as file:
|
|
for line in file:
|
|
item = json.loads(line)
|
|
# 'category3Name'과 'category4Name'의 '$numberDouble':"NaN"을 처리
|
|
if isinstance(item.get("category3Name"), dict) and "$numberDouble" in item["category3Name"]:
|
|
item["category3Name"] = "" # 또는 None 사용
|
|
if isinstance(item.get("category4Name"), dict) and "$numberDouble" in item["category4Name"]:
|
|
item["category4Name"] = "" # 또는 None 사용
|
|
json_data.append(item)
|
|
|
|
return json_data
|
|
|
|
except FileNotFoundError:
|
|
print("Percenty_SS_Code.json 파일을 찾을 수 없습니다.")
|
|
json_data = [] # 파일이 없을 경우 빈 리스트 할당
|
|
return json_data
|
|
|
|
|
|
def loadCategories(self):
|
|
# self.categories = {"category1Name": {}, "category2Name": {}, "category3Name": {}, "category4Name": {}}
|
|
try:
|
|
for item in self.json_data:
|
|
cat1 = item.get("category1Name")
|
|
cat2 = item.get("category2Name")
|
|
cat3 = item.get("category3Name", None)
|
|
cat4 = item.get("category4Name", None)
|
|
# category3Name과 category4Name 처리
|
|
cat3 = item.get("category3Name", None)
|
|
cat4 = item.get("category4Name", None)
|
|
if isinstance(cat3, dict) and "$numberDouble" in cat3:
|
|
cat3 = None # "$numberDouble":"NaN"일 경우 None으로 처리
|
|
if isinstance(cat4, dict) and "$numberDouble" in cat4:
|
|
cat4 = None # "$numberDouble":"NaN"일 경우 None으로 처리
|
|
|
|
# 계층 구조 구축
|
|
if cat1 not in self.categories["category1Name"]:
|
|
self.categories["category1Name"][cat1] = {"category2Name": {}}
|
|
if cat2 and cat2 not in self.categories["category1Name"][cat1]["category2Name"]:
|
|
self.categories["category1Name"][cat1]["category2Name"][cat2] = {"category3Name": {}}
|
|
if cat3 and cat3 not in self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"]:
|
|
self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"][cat3] = {"category4Name": {}}
|
|
if cat4:
|
|
self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"][cat3]["category4Name"][cat4] = True
|
|
except Exception as e:
|
|
print(f"카테고리 로딩 에러 {e}")
|
|
return
|
|
|
|
print("프로그램 시작")
|
|
|
|
base_category =["가구/인테리어-아웃도어가구-기타아웃도어가구","가구/인테리어-아웃도어가구-야외벤치"]
|
|
print(f"베이스 카테고리 {base_category}")
|
|
json_data = loadJsonData()
|
|
|
|
codes = find_codes(base_category, json_data)
|
|
|
|
for code in codes:
|
|
naver_code, cat_code = code
|
|
print(f"naver_code : {naver_code}, cat_code : {cat_code}")
|