baidu_web/xlsReader.py

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)