78 lines
3.6 KiB
Python
78 lines
3.6 KiB
Python
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
|
|
class ExcelReader:
|
|
def __init__(self, folder_path, logger):
|
|
self.folder_path = folder_path
|
|
self.logger = logger
|
|
self.logger.info("ExcelReader initialized.")
|
|
|
|
def read_excel_files_for(self):
|
|
# 엑셀 파일을 순회하며 모든 데이터 수집
|
|
try:
|
|
data = []
|
|
seen_items = set() # 중복을 확인할 집합
|
|
|
|
for file_name in os.listdir(self.folder_path):
|
|
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
|
|
file_path = os.path.join(self.folder_path, file_name)
|
|
self.logger.debug(f"Reading file: {file_path}")
|
|
xls = pd.ExcelFile(file_path)
|
|
|
|
for sheet_name in xls.sheet_names:
|
|
df = pd.read_excel(xls, sheet_name=sheet_name)
|
|
|
|
# 컬럼 이름을 영문으로 변경하고 'NaN'을 None으로 변환
|
|
df = df.rename(columns={
|
|
'상품명': 'name',
|
|
'이미지URL': 'image_url',
|
|
'태그': 'tag',
|
|
'가격': 'price',
|
|
'카테고리': 'category',
|
|
'퍼센티카테고리': 'percenty_category'
|
|
}).replace({np.nan: None})
|
|
|
|
for record in df.to_dict('records'):
|
|
# 상품명과 이미지 URL을 이용해 중복 체크
|
|
unique_key = (record['name'], record['image_url'])
|
|
if unique_key not in seen_items:
|
|
seen_items.add(unique_key)
|
|
data.append(record)
|
|
else:
|
|
self.logger.debug(f"Duplicate found and skipped: {unique_key}")
|
|
|
|
self.logger.info("read_excel_files successfully.")
|
|
self.logger.debug(f"{data}")
|
|
return data
|
|
except Exception as e:
|
|
self.logger.error(f"Error in read_excel_files: {e}", exc_info=True)
|
|
|
|
def read_excel_files(self):
|
|
# 엑셀 파일을 순회하며 모든 데이터 수집
|
|
try:
|
|
data = []
|
|
for file_name in os.listdir(self.folder_path):
|
|
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
|
|
file_path = os.path.join(self.folder_path, file_name)
|
|
self.logger.debug(f"Reading file: {file_path}")
|
|
xls = pd.ExcelFile(file_path)
|
|
for sheet_name in xls.sheet_names:
|
|
df = pd.read_excel(xls, sheet_name=sheet_name)
|
|
# 컬럼 이름을 영문으로 변경하고 'NaN'을 None으로 변환
|
|
df = df.rename(columns={
|
|
'상품명': 'name',
|
|
'이미지URL': 'image_url',
|
|
'태그': 'tag',
|
|
'가격': 'price',
|
|
'카테고리': 'category',
|
|
'퍼센티카테고리': 'percenty_category'
|
|
}).replace({np.nan: None})
|
|
data.extend(df.to_dict('records'))
|
|
self.logger.info("read_excel_files successfully.")
|
|
self.logger.debug(f"{data}")
|
|
return data
|
|
except Exception as e:
|
|
self.logger.error(f"Error read_excel_files: {e}", exc_info=True)
|
|
|