tao2/test_code.py

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}")