-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathname_converter.py
96 lines (75 loc) · 2.92 KB
/
name_converter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from typing import Tuple
import openpyxl
from pydantic import BaseModel
from constants import PEOPLE_LIST_HEADERS
class Human(BaseModel):
cic_name: str
cell_name: str
eng_name: str | None
kor_name: str
card_full_num: str | None
def __repr__(self):
return f"{self.cic_name} {self.cell_name} {self.eng_name}"
class NameExcelToDict:
header_cols = {}
nickname_cols = []
HEADER_START_ROW = 2
# cell_list = set()
def __init__(self, wb_people: openpyxl.Workbook):
self.ws = wb_people["Member List"]
self.nick_to_human = {}
self.card_num_to_human = {}
def run(self) -> Tuple[dict, dict, set]:
self._init_cols()
self._init_dicts()
return self.nick_to_human, self.card_num_to_human # , list(self.cell_list)
def _init_cols(self):
header_cells = self.ws[self.HEADER_START_ROW]
for cell in header_cells:
if cell.value is None:
continue
value = cell.value.lower()
col_idx = cell.col_idx
self._set_header_cols(col_idx, value)
self._set_nickname_cols(col_idx, value)
def _set_header_cols(self, col_idx: int, value: str) -> None:
if value in PEOPLE_LIST_HEADERS:
self.header_cols[PEOPLE_LIST_HEADERS[value]] = col_idx
def _set_nickname_cols(self, col_idx: int, value: str) -> None:
if "name" in value:
self.nickname_cols.append(col_idx)
def _id_exist(self, row) -> bool:
return self.ws.cell(row, 1).value is not None
def _init_dicts(self) -> None:
row = self.HEADER_START_ROW + 1
while self._id_exist(row):
human: Human = self._set_human(row)
self._set_nick_to_human(row, human)
self._set_card_num_to_human(human)
# self._set_cell_list(row)
row += 1
return
def _set_human(self, row: int) -> Human:
human_attrs = {}
for header, col_nums in self.header_cols.items():
human_attrs[header] = self.ws.cell(row, col_nums).value
return Human(**human_attrs)
def _set_nick_to_human(self, row: int, human: Human) -> None:
for nickname_cols in self.nickname_cols:
nickname = self.ws.cell(row, nickname_cols).value
if nickname is None:
continue
if nickname in self.nick_to_human:
self.nick_to_human[nickname] = False
continue
self.nick_to_human[nickname] = human
return
def _set_card_num_to_human(self, human: Human) -> None:
self.card_num_to_human[human.card_full_num] = human
return
# def _set_cell_list(self, row:int) -> None:
# cell_col = self.header_cols["cell_name"]
# cic_col = self.header_cols["cic_name"]
# cell = self.ws.cell(row, cell_col).value
# cic = self.ws.cell(row,cic_col).value
# self.cell_list.add((cic,cell))