utilskit 0.2.16__tar.gz → 0.2.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {utilskit-0.2.16/utilskit.egg-info → utilskit-0.2.17}/PKG-INFO +54 -24
- {utilskit-0.2.16 → utilskit-0.2.17}/README.md +53 -23
- {utilskit-0.2.16 → utilskit-0.2.17}/pyproject.toml +1 -1
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/repeatutils/repeatutils.py +1 -1
- {utilskit-0.2.16 → utilskit-0.2.17/utilskit.egg-info}/PKG-INFO +54 -24
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit.egg-info/SOURCES.txt +0 -2
- utilskit-0.2.16/utilskit/logutils/__init__.py +0 -1
- utilskit-0.2.16/utilskit/logutils/logutils.py +0 -215
- {utilskit-0.2.16 → utilskit-0.2.17}/MANIFEST.in +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/setup.cfg +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/test/test.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/classificationutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/classificationutils/classificationutils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/dataframeutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/dataframeutils/dataframeutils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/dbutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/dbutils/dbutils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/plotutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/plotutils/plotutils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/repeatutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/timeutils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/timeutils/timeutils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/utils/__init__.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit/utils/utils.py +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit.egg-info/dependency_links.txt +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit.egg-info/requires.txt +0 -0
- {utilskit-0.2.16 → utilskit-0.2.17}/utilskit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: utilskit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17
|
|
4
4
|
Summary: 다양한 편의성 함수 모음 패키지
|
|
5
5
|
Author-email: kimyh <kim_yh663927@naver.com>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -17,52 +17,82 @@ Requires-Dist: tqdm==4.67.1
|
|
|
17
17
|
Requires-Dist: xlrd==2.0.2
|
|
18
18
|
Requires-Dist: openpyxl==3.1.5
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# install
|
|
21
|
+
```cmd
|
|
22
|
+
pip install utilskit
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# 개요
|
|
26
|
+
|
|
27
|
+
데이터 전처리를 위한 편의용 연산함수 모음 toolkit
|
|
28
|
+
|
|
29
|
+
- classificationutils
|
|
30
|
+
confusion maxtrix 생성 지원
|
|
31
|
+
- dataframeutils
|
|
32
|
+
pandas dataframe 에 대한 전처리 지원
|
|
33
|
+
각종 확장자 대응 불러오기, 시간컬럼보정, 결측치보완, 유효성 평가 지원
|
|
34
|
+
- dbutils
|
|
35
|
+
query 날리기, dataframe 전체 DB 삽입, DB테이블컬럼추출 등 지원
|
|
36
|
+
- plotutils
|
|
37
|
+
python matplotlib 함수 기반 이미지 생성 간편화 지원
|
|
38
|
+
- repeatutils
|
|
39
|
+
data array 또는 list 에서 반복되는 구간을 입력된 변수 논리에 따라 산정하는 전처리연산 지원
|
|
40
|
+
- timeutils
|
|
41
|
+
입력된 수치의 시, 분, 초 반환, 입력된 시작~끝일 사이의 전체 날짜 문자열 생성, 현재 시간에 대한 유동적 추출 지원
|
|
42
|
+
- utils
|
|
43
|
+
에러 메세지 추출 등 일반적인 편의성 함수 연산 지원
|
|
44
|
+
|
|
45
|
+
# version
|
|
46
|
+
## 0.2.17
|
|
47
|
+
- logutils 기능 완전 삭제 > logie 패키지로 분리
|
|
48
|
+
## 0.2.16
|
|
21
49
|
- repeatutils 의 section_union 에서 mode 를 & 으로 하고 sub 또는 main section 이 빈 리스트인 경우 빈리스트 [] 를 리턴 하도록 수정
|
|
22
|
-
|
|
50
|
+
### 0.2.16.1
|
|
51
|
+
- 조건문에서 & 앞에 띄어쓰기가 하나 포함되어있어 정상적 연산이 되지 않는 부분 수정
|
|
52
|
+
## 0.2.15
|
|
23
53
|
- repeatutils 의 section_union 에서 결과가 빈값일때 에러가 나는 현상 수정
|
|
24
|
-
|
|
54
|
+
## 0.2.14
|
|
25
55
|
- repeatutils 의 min_key 를 설정했을 때 min_equal=False 로 두는 경우 정상적인 구간 탐색을 못하는 현상 수정
|
|
26
|
-
|
|
56
|
+
## 0.2.13
|
|
27
57
|
- repeatutils 에 section_union 함수 추가
|
|
28
|
-
|
|
58
|
+
### 0.2.13.1
|
|
29
59
|
- rpu.get_section 을 써서 에러가 난 부분 수정
|
|
30
|
-
|
|
60
|
+
## 0.2.12
|
|
31
61
|
- dataframeutils 의 fill_repeat_nan 함수가 NaN 이 딱 하나만 있는 경우 보정하지 못하는 현상 수정
|
|
32
|
-
|
|
62
|
+
## 0.2.11
|
|
33
63
|
- dataframeutils 의 fill_repeat_nan 함수가 3 이하 반복되는 NaN 이 아닌 3 이상 반복되는 NaN 구간에 대해 보정하는 현상 수정
|
|
34
|
-
|
|
64
|
+
## 0.2.10
|
|
35
65
|
- repeatutils 에서 between 이 정상작동하지 않는 현상 수정
|
|
36
|
-
|
|
66
|
+
### 0.2.10.1
|
|
37
67
|
- 버전 업로드 에러 수정
|
|
38
|
-
|
|
68
|
+
### 0.2.10.2
|
|
39
69
|
- 함수 내부 print 제거
|
|
40
|
-
|
|
70
|
+
## 0.2.9
|
|
41
71
|
- repeatuils 에서 정수형 list 를 넣었을때 float 으로 변경되도록 수정
|
|
42
|
-
|
|
72
|
+
## 0.2.8
|
|
43
73
|
- dbutils 에서 db 의 컬럼명을 리스트로 추출하는 get_db_name 함수 추가
|
|
44
|
-
|
|
74
|
+
### 0.2.8.1
|
|
45
75
|
- __all__ 에 get_db_name 추가해서 사용가능하도록 설정
|
|
46
|
-
|
|
76
|
+
## 0.2.7
|
|
47
77
|
- repeatutils 에서 정수형 list 를 넣었을때 key 를 통한 구간 파악이 되지 않는 현상 수정
|
|
48
|
-
|
|
78
|
+
## 0.2.6
|
|
49
79
|
- dataframeutils 의 fill_repeat_nan 의 에러 수정
|
|
50
|
-
|
|
80
|
+
## 0.2.5
|
|
51
81
|
- xlsx 읽는 패키지 install 추가
|
|
52
|
-
|
|
82
|
+
## 0.2.4
|
|
53
83
|
- repeatutils 의 에러 제거
|
|
54
|
-
|
|
84
|
+
## 0.2.3
|
|
55
85
|
- dbutils 에 대한 업데이트 진행
|
|
56
|
-
|
|
86
|
+
## 0.2.2
|
|
57
87
|
- build 방식 변경
|
|
58
|
-
|
|
88
|
+
## 0.2.1
|
|
59
89
|
- repeatutila 에 get_section 함수 추가
|
|
60
|
-
|
|
90
|
+
## 0.2.0
|
|
61
91
|
- 정식 최초 배포버전
|
|
62
92
|
- 각 함수의 사용성 강화 및 비활성 함수 지정
|
|
63
|
-
|
|
93
|
+
## 0.1.2
|
|
64
94
|
- repeatutils 의 get_repeat_section 에서 하나의 값이 여러 구간에서 반복될때 마지막 구간만 나오는 부분 수정
|
|
65
95
|
- repeatutils 의 get_repeat_section 및 get_stan_repeat_section 에서 추출되는 구간의 마지막 값이 +1 이 되는 부분 수정
|
|
66
|
-
|
|
96
|
+
## 0.1.1
|
|
67
97
|
- repeatutils.py 추가
|
|
68
98
|
- utils.py 에서 repeat 관련 함수 제거
|
|
@@ -1,49 +1,79 @@
|
|
|
1
|
-
#
|
|
1
|
+
# install
|
|
2
|
+
```cmd
|
|
3
|
+
pip install utilskit
|
|
4
|
+
```
|
|
5
|
+
|
|
6
|
+
# 개요
|
|
7
|
+
|
|
8
|
+
데이터 전처리를 위한 편의용 연산함수 모음 toolkit
|
|
9
|
+
|
|
10
|
+
- classificationutils
|
|
11
|
+
confusion maxtrix 생성 지원
|
|
12
|
+
- dataframeutils
|
|
13
|
+
pandas dataframe 에 대한 전처리 지원
|
|
14
|
+
각종 확장자 대응 불러오기, 시간컬럼보정, 결측치보완, 유효성 평가 지원
|
|
15
|
+
- dbutils
|
|
16
|
+
query 날리기, dataframe 전체 DB 삽입, DB테이블컬럼추출 등 지원
|
|
17
|
+
- plotutils
|
|
18
|
+
python matplotlib 함수 기반 이미지 생성 간편화 지원
|
|
19
|
+
- repeatutils
|
|
20
|
+
data array 또는 list 에서 반복되는 구간을 입력된 변수 논리에 따라 산정하는 전처리연산 지원
|
|
21
|
+
- timeutils
|
|
22
|
+
입력된 수치의 시, 분, 초 반환, 입력된 시작~끝일 사이의 전체 날짜 문자열 생성, 현재 시간에 대한 유동적 추출 지원
|
|
23
|
+
- utils
|
|
24
|
+
에러 메세지 추출 등 일반적인 편의성 함수 연산 지원
|
|
25
|
+
|
|
26
|
+
# version
|
|
27
|
+
## 0.2.17
|
|
28
|
+
- logutils 기능 완전 삭제 > logie 패키지로 분리
|
|
29
|
+
## 0.2.16
|
|
2
30
|
- repeatutils 의 section_union 에서 mode 를 & 으로 하고 sub 또는 main section 이 빈 리스트인 경우 빈리스트 [] 를 리턴 하도록 수정
|
|
3
|
-
|
|
31
|
+
### 0.2.16.1
|
|
32
|
+
- 조건문에서 & 앞에 띄어쓰기가 하나 포함되어있어 정상적 연산이 되지 않는 부분 수정
|
|
33
|
+
## 0.2.15
|
|
4
34
|
- repeatutils 의 section_union 에서 결과가 빈값일때 에러가 나는 현상 수정
|
|
5
|
-
|
|
35
|
+
## 0.2.14
|
|
6
36
|
- repeatutils 의 min_key 를 설정했을 때 min_equal=False 로 두는 경우 정상적인 구간 탐색을 못하는 현상 수정
|
|
7
|
-
|
|
37
|
+
## 0.2.13
|
|
8
38
|
- repeatutils 에 section_union 함수 추가
|
|
9
|
-
|
|
39
|
+
### 0.2.13.1
|
|
10
40
|
- rpu.get_section 을 써서 에러가 난 부분 수정
|
|
11
|
-
|
|
41
|
+
## 0.2.12
|
|
12
42
|
- dataframeutils 의 fill_repeat_nan 함수가 NaN 이 딱 하나만 있는 경우 보정하지 못하는 현상 수정
|
|
13
|
-
|
|
43
|
+
## 0.2.11
|
|
14
44
|
- dataframeutils 의 fill_repeat_nan 함수가 3 이하 반복되는 NaN 이 아닌 3 이상 반복되는 NaN 구간에 대해 보정하는 현상 수정
|
|
15
|
-
|
|
45
|
+
## 0.2.10
|
|
16
46
|
- repeatutils 에서 between 이 정상작동하지 않는 현상 수정
|
|
17
|
-
|
|
47
|
+
### 0.2.10.1
|
|
18
48
|
- 버전 업로드 에러 수정
|
|
19
|
-
|
|
49
|
+
### 0.2.10.2
|
|
20
50
|
- 함수 내부 print 제거
|
|
21
|
-
|
|
51
|
+
## 0.2.9
|
|
22
52
|
- repeatuils 에서 정수형 list 를 넣었을때 float 으로 변경되도록 수정
|
|
23
|
-
|
|
53
|
+
## 0.2.8
|
|
24
54
|
- dbutils 에서 db 의 컬럼명을 리스트로 추출하는 get_db_name 함수 추가
|
|
25
|
-
|
|
55
|
+
### 0.2.8.1
|
|
26
56
|
- __all__ 에 get_db_name 추가해서 사용가능하도록 설정
|
|
27
|
-
|
|
57
|
+
## 0.2.7
|
|
28
58
|
- repeatutils 에서 정수형 list 를 넣었을때 key 를 통한 구간 파악이 되지 않는 현상 수정
|
|
29
|
-
|
|
59
|
+
## 0.2.6
|
|
30
60
|
- dataframeutils 의 fill_repeat_nan 의 에러 수정
|
|
31
|
-
|
|
61
|
+
## 0.2.5
|
|
32
62
|
- xlsx 읽는 패키지 install 추가
|
|
33
|
-
|
|
63
|
+
## 0.2.4
|
|
34
64
|
- repeatutils 의 에러 제거
|
|
35
|
-
|
|
65
|
+
## 0.2.3
|
|
36
66
|
- dbutils 에 대한 업데이트 진행
|
|
37
|
-
|
|
67
|
+
## 0.2.2
|
|
38
68
|
- build 방식 변경
|
|
39
|
-
|
|
69
|
+
## 0.2.1
|
|
40
70
|
- repeatutila 에 get_section 함수 추가
|
|
41
|
-
|
|
71
|
+
## 0.2.0
|
|
42
72
|
- 정식 최초 배포버전
|
|
43
73
|
- 각 함수의 사용성 강화 및 비활성 함수 지정
|
|
44
|
-
|
|
74
|
+
## 0.1.2
|
|
45
75
|
- repeatutils 의 get_repeat_section 에서 하나의 값이 여러 구간에서 반복될때 마지막 구간만 나오는 부분 수정
|
|
46
76
|
- repeatutils 의 get_repeat_section 및 get_stan_repeat_section 에서 추출되는 구간의 마지막 값이 +1 이 되는 부분 수정
|
|
47
|
-
|
|
77
|
+
## 0.1.1
|
|
48
78
|
- repeatutils.py 추가
|
|
49
79
|
- utils.py 에서 repeat 관련 함수 제거
|
|
@@ -507,7 +507,7 @@ def get_section(data, repeat, mode='a', key=None,
|
|
|
507
507
|
def section_union(main_section, sub_section, mode):
|
|
508
508
|
|
|
509
509
|
if len(main_section) == 0 or len(sub_section) == 0:
|
|
510
|
-
if mode == '
|
|
510
|
+
if mode == '&':
|
|
511
511
|
return []
|
|
512
512
|
else:
|
|
513
513
|
return main_section
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: utilskit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17
|
|
4
4
|
Summary: 다양한 편의성 함수 모음 패키지
|
|
5
5
|
Author-email: kimyh <kim_yh663927@naver.com>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -17,52 +17,82 @@ Requires-Dist: tqdm==4.67.1
|
|
|
17
17
|
Requires-Dist: xlrd==2.0.2
|
|
18
18
|
Requires-Dist: openpyxl==3.1.5
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# install
|
|
21
|
+
```cmd
|
|
22
|
+
pip install utilskit
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# 개요
|
|
26
|
+
|
|
27
|
+
데이터 전처리를 위한 편의용 연산함수 모음 toolkit
|
|
28
|
+
|
|
29
|
+
- classificationutils
|
|
30
|
+
confusion maxtrix 생성 지원
|
|
31
|
+
- dataframeutils
|
|
32
|
+
pandas dataframe 에 대한 전처리 지원
|
|
33
|
+
각종 확장자 대응 불러오기, 시간컬럼보정, 결측치보완, 유효성 평가 지원
|
|
34
|
+
- dbutils
|
|
35
|
+
query 날리기, dataframe 전체 DB 삽입, DB테이블컬럼추출 등 지원
|
|
36
|
+
- plotutils
|
|
37
|
+
python matplotlib 함수 기반 이미지 생성 간편화 지원
|
|
38
|
+
- repeatutils
|
|
39
|
+
data array 또는 list 에서 반복되는 구간을 입력된 변수 논리에 따라 산정하는 전처리연산 지원
|
|
40
|
+
- timeutils
|
|
41
|
+
입력된 수치의 시, 분, 초 반환, 입력된 시작~끝일 사이의 전체 날짜 문자열 생성, 현재 시간에 대한 유동적 추출 지원
|
|
42
|
+
- utils
|
|
43
|
+
에러 메세지 추출 등 일반적인 편의성 함수 연산 지원
|
|
44
|
+
|
|
45
|
+
# version
|
|
46
|
+
## 0.2.17
|
|
47
|
+
- logutils 기능 완전 삭제 > logie 패키지로 분리
|
|
48
|
+
## 0.2.16
|
|
21
49
|
- repeatutils 의 section_union 에서 mode 를 & 으로 하고 sub 또는 main section 이 빈 리스트인 경우 빈리스트 [] 를 리턴 하도록 수정
|
|
22
|
-
|
|
50
|
+
### 0.2.16.1
|
|
51
|
+
- 조건문에서 & 앞에 띄어쓰기가 하나 포함되어있어 정상적 연산이 되지 않는 부분 수정
|
|
52
|
+
## 0.2.15
|
|
23
53
|
- repeatutils 의 section_union 에서 결과가 빈값일때 에러가 나는 현상 수정
|
|
24
|
-
|
|
54
|
+
## 0.2.14
|
|
25
55
|
- repeatutils 의 min_key 를 설정했을 때 min_equal=False 로 두는 경우 정상적인 구간 탐색을 못하는 현상 수정
|
|
26
|
-
|
|
56
|
+
## 0.2.13
|
|
27
57
|
- repeatutils 에 section_union 함수 추가
|
|
28
|
-
|
|
58
|
+
### 0.2.13.1
|
|
29
59
|
- rpu.get_section 을 써서 에러가 난 부분 수정
|
|
30
|
-
|
|
60
|
+
## 0.2.12
|
|
31
61
|
- dataframeutils 의 fill_repeat_nan 함수가 NaN 이 딱 하나만 있는 경우 보정하지 못하는 현상 수정
|
|
32
|
-
|
|
62
|
+
## 0.2.11
|
|
33
63
|
- dataframeutils 의 fill_repeat_nan 함수가 3 이하 반복되는 NaN 이 아닌 3 이상 반복되는 NaN 구간에 대해 보정하는 현상 수정
|
|
34
|
-
|
|
64
|
+
## 0.2.10
|
|
35
65
|
- repeatutils 에서 between 이 정상작동하지 않는 현상 수정
|
|
36
|
-
|
|
66
|
+
### 0.2.10.1
|
|
37
67
|
- 버전 업로드 에러 수정
|
|
38
|
-
|
|
68
|
+
### 0.2.10.2
|
|
39
69
|
- 함수 내부 print 제거
|
|
40
|
-
|
|
70
|
+
## 0.2.9
|
|
41
71
|
- repeatuils 에서 정수형 list 를 넣었을때 float 으로 변경되도록 수정
|
|
42
|
-
|
|
72
|
+
## 0.2.8
|
|
43
73
|
- dbutils 에서 db 의 컬럼명을 리스트로 추출하는 get_db_name 함수 추가
|
|
44
|
-
|
|
74
|
+
### 0.2.8.1
|
|
45
75
|
- __all__ 에 get_db_name 추가해서 사용가능하도록 설정
|
|
46
|
-
|
|
76
|
+
## 0.2.7
|
|
47
77
|
- repeatutils 에서 정수형 list 를 넣었을때 key 를 통한 구간 파악이 되지 않는 현상 수정
|
|
48
|
-
|
|
78
|
+
## 0.2.6
|
|
49
79
|
- dataframeutils 의 fill_repeat_nan 의 에러 수정
|
|
50
|
-
|
|
80
|
+
## 0.2.5
|
|
51
81
|
- xlsx 읽는 패키지 install 추가
|
|
52
|
-
|
|
82
|
+
## 0.2.4
|
|
53
83
|
- repeatutils 의 에러 제거
|
|
54
|
-
|
|
84
|
+
## 0.2.3
|
|
55
85
|
- dbutils 에 대한 업데이트 진행
|
|
56
|
-
|
|
86
|
+
## 0.2.2
|
|
57
87
|
- build 방식 변경
|
|
58
|
-
|
|
88
|
+
## 0.2.1
|
|
59
89
|
- repeatutila 에 get_section 함수 추가
|
|
60
|
-
|
|
90
|
+
## 0.2.0
|
|
61
91
|
- 정식 최초 배포버전
|
|
62
92
|
- 각 함수의 사용성 강화 및 비활성 함수 지정
|
|
63
|
-
|
|
93
|
+
## 0.1.2
|
|
64
94
|
- repeatutils 의 get_repeat_section 에서 하나의 값이 여러 구간에서 반복될때 마지막 구간만 나오는 부분 수정
|
|
65
95
|
- repeatutils 의 get_repeat_section 및 get_stan_repeat_section 에서 추출되는 구간의 마지막 값이 +1 이 되는 부분 수정
|
|
66
|
-
|
|
96
|
+
## 0.1.1
|
|
67
97
|
- repeatutils.py 추가
|
|
68
98
|
- utils.py 에서 repeat 관련 함수 제거
|
|
@@ -14,8 +14,6 @@ utilskit/dataframeutils/__init__.py
|
|
|
14
14
|
utilskit/dataframeutils/dataframeutils.py
|
|
15
15
|
utilskit/dbutils/__init__.py
|
|
16
16
|
utilskit/dbutils/dbutils.py
|
|
17
|
-
utilskit/logutils/__init__.py
|
|
18
|
-
utilskit/logutils/logutils.py
|
|
19
17
|
utilskit/plotutils/__init__.py
|
|
20
18
|
utilskit/plotutils/plotutils.py
|
|
21
19
|
utilskit/repeatutils/__init__.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .logutils import *
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import os
|
|
3
|
-
from tqdm import tqdm
|
|
4
|
-
import shutil
|
|
5
|
-
|
|
6
|
-
import logging
|
|
7
|
-
from logging import handlers
|
|
8
|
-
|
|
9
|
-
import warnings
|
|
10
|
-
warnings.filterwarnings('ignore')
|
|
11
|
-
|
|
12
|
-
__all__ = ['get_logger', 'log_sort']
|
|
13
|
-
|
|
14
|
-
# def get_logger(name, save_path, log_file_name, time_handler=True, console_display=False, logging_level='info'):
|
|
15
|
-
# '''
|
|
16
|
-
# 로거 함수
|
|
17
|
-
|
|
18
|
-
# parameters
|
|
19
|
-
# ----------
|
|
20
|
-
# get: str
|
|
21
|
-
# log 생성용 이름.
|
|
22
|
-
|
|
23
|
-
# log_file_name: str
|
|
24
|
-
# logger 파일을 생성할 때 적용할 파일 이름 + path.
|
|
25
|
-
|
|
26
|
-
# time_handler: bool (default: True)
|
|
27
|
-
# 자정(00:00) 을 넘긴 경우 그때까지 쌓인 기록을 이전 날짜 기록으로 뺄지 여부
|
|
28
|
-
|
|
29
|
-
# console_display: bool (default: False)
|
|
30
|
-
# 로그 기록값을 콘솔에 표시할것인지 여부
|
|
31
|
-
|
|
32
|
-
# logging_level: str
|
|
33
|
-
# logger 를 표시할 수준. (notset < debug < info < warning < error < critical)
|
|
34
|
-
|
|
35
|
-
# returns
|
|
36
|
-
# -------
|
|
37
|
-
# logger: logger
|
|
38
|
-
# 로거를 적용할 수 있는 로거 변수
|
|
39
|
-
# '''
|
|
40
|
-
# import logging
|
|
41
|
-
# from logging import handlers
|
|
42
|
-
# os.makedirs(save_path, exist_ok=True)
|
|
43
|
-
|
|
44
|
-
# logger = logging.getLogger(name)
|
|
45
|
-
# if logging_level == 'critical':
|
|
46
|
-
# logger.setLevel(logging.CRITICAL)
|
|
47
|
-
# if logging_level == 'error':
|
|
48
|
-
# logger.setLevel(logging.ERROR)
|
|
49
|
-
# if logging_level == 'warning':
|
|
50
|
-
# logger.setLevel(logging.WARNING)
|
|
51
|
-
# if logging_level == 'info':
|
|
52
|
-
# logger.setLevel(logging.INFO)
|
|
53
|
-
# if logging_level == 'debug':
|
|
54
|
-
# logger.setLevel(logging.DEBUG)
|
|
55
|
-
# if logging_level == 'notset':
|
|
56
|
-
# logger.setLevel(logging.NOTSET)
|
|
57
|
-
|
|
58
|
-
# # formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
59
|
-
# formatter = logging.Formatter('%(asctime)s level:%(levelname)s %(filename)s line %(lineno)d %(message)s')
|
|
60
|
-
# if console_display:
|
|
61
|
-
# stream_handler = logging.StreamHandler()
|
|
62
|
-
# stream_handler.setFormatter(formatter)
|
|
63
|
-
# logger.addHandler(stream_handler)
|
|
64
|
-
|
|
65
|
-
# if time_handler:
|
|
66
|
-
# file_handler = handlers.TimedRotatingFileHandler(
|
|
67
|
-
# filename=f'{save_path}/{log_file_name}',
|
|
68
|
-
# when="midnight",
|
|
69
|
-
# interval=1,
|
|
70
|
-
# backupCount=30,
|
|
71
|
-
# encoding="utf-8")
|
|
72
|
-
# file_handler.suffix = '%Y%m%d'
|
|
73
|
-
# else:
|
|
74
|
-
# file_handler = logging.FileHandler(f'{save_path}/{log_file_name}')
|
|
75
|
-
|
|
76
|
-
# file_handler.setFormatter(formatter)
|
|
77
|
-
# logger.addHandler(file_handler)
|
|
78
|
-
# return logger
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# 커스텀 필터: INFO 이하만 통과
|
|
83
|
-
class MaxLevelFilter(logging.Filter):
|
|
84
|
-
def __init__(self, max_level):
|
|
85
|
-
self.max_level = max_level
|
|
86
|
-
def filter(self, record):
|
|
87
|
-
return record.levelno <= self.max_level
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def get_logger(log_path=None, log_name='app', rollover=True):#, console_display=False, logging_level='info'):
|
|
91
|
-
|
|
92
|
-
if log_path is None:
|
|
93
|
-
log_path = os.path.join(os.getcwd(), 'log')
|
|
94
|
-
|
|
95
|
-
# 로그 저장 경로 생성
|
|
96
|
-
os.makedirs(log_path, exist_ok=True)
|
|
97
|
-
|
|
98
|
-
# 경로
|
|
99
|
-
file_h_path = os.path.join(log_path, f'{log_name}.log')
|
|
100
|
-
info_h_path = os.path.join(log_path, 'info.log')
|
|
101
|
-
error_h_path = os.path.join(log_path, 'error.log')
|
|
102
|
-
|
|
103
|
-
'''
|
|
104
|
-
로그 수준 정도(낮은 순)
|
|
105
|
-
logging.NOTSET
|
|
106
|
-
logging.DEBUG
|
|
107
|
-
logging.INFO
|
|
108
|
-
logging.WARNING
|
|
109
|
-
logging.ERROR
|
|
110
|
-
logging.CRITICAL
|
|
111
|
-
'''
|
|
112
|
-
|
|
113
|
-
# 로거 생성
|
|
114
|
-
logger = logging.getLogger('app')
|
|
115
|
-
|
|
116
|
-
# 로거 전체 기준 수준 설정
|
|
117
|
-
logger.setLevel(logging.DEBUG)
|
|
118
|
-
|
|
119
|
-
# 파일 핸들러 설정
|
|
120
|
-
if rollover:
|
|
121
|
-
file_handler = handlers.TimedRotatingFileHandler(
|
|
122
|
-
filename=file_h_path,
|
|
123
|
-
when="midnight",
|
|
124
|
-
interval=1,
|
|
125
|
-
backupCount=30,
|
|
126
|
-
encoding="utf-8")
|
|
127
|
-
file_handler.suffix = '%Y%m%d'
|
|
128
|
-
|
|
129
|
-
info_handler = handlers.TimedRotatingFileHandler(
|
|
130
|
-
filename=info_h_path,
|
|
131
|
-
when="midnight",
|
|
132
|
-
interval=1,
|
|
133
|
-
backupCount=30,
|
|
134
|
-
encoding="utf-8")
|
|
135
|
-
info_handler.suffix = '%Y%m%d'
|
|
136
|
-
|
|
137
|
-
error_handler = handlers.TimedRotatingFileHandler(
|
|
138
|
-
filename=error_h_path,
|
|
139
|
-
when="midnight",
|
|
140
|
-
interval=1,
|
|
141
|
-
backupCount=30,
|
|
142
|
-
encoding="utf-8")
|
|
143
|
-
error_handler.suffix = '%Y%m%d'
|
|
144
|
-
else:
|
|
145
|
-
file_handler = logging.FileHandler(file_h_path)
|
|
146
|
-
info_handler = logging.FileHandler(info_h_path)
|
|
147
|
-
error_handler = logging.FileHandler(error_h_path)
|
|
148
|
-
|
|
149
|
-
# 핸들러 수준 설정
|
|
150
|
-
file_handler.setLevel(logging.INFO)
|
|
151
|
-
|
|
152
|
-
info_handler.setLevel(logging.INFO)
|
|
153
|
-
info_handler.addFilter(MaxLevelFilter(logging.INFO)) # info 수준만 기록
|
|
154
|
-
|
|
155
|
-
error_handler.setLevel(logging.ERROR)
|
|
156
|
-
error_handler.addFilter(MaxLevelFilter(logging.ERROR)) # error 수준만 기록
|
|
157
|
-
|
|
158
|
-
# formatter 설정
|
|
159
|
-
formatter = logging.Formatter('%(asctime)s level:%(levelname)s %(filename)s line %(lineno)d %(message)s')
|
|
160
|
-
# if console_display:
|
|
161
|
-
# stream_handler = logging.StreamHandler()
|
|
162
|
-
# stream_handler.setFormatter(formatter)
|
|
163
|
-
# logger.addHandler(stream_handler)
|
|
164
|
-
|
|
165
|
-
# 핸들러에 formatter 연결
|
|
166
|
-
file_handler.setFormatter(formatter)
|
|
167
|
-
info_handler.setFormatter(formatter)
|
|
168
|
-
error_handler.setFormatter(formatter)
|
|
169
|
-
|
|
170
|
-
# 로거에 핸들러 추가
|
|
171
|
-
logger.addHandler(file_handler)
|
|
172
|
-
logger.addHandler(info_handler)
|
|
173
|
-
logger.addHandler(error_handler)
|
|
174
|
-
|
|
175
|
-
# 같은 핸들러 인스턴스에 여러 로거를 추가하는 것은 추후 추가
|
|
176
|
-
return logger
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
def log_sort(log_path=None):
|
|
180
|
-
if log_path is None:
|
|
181
|
-
log_path = os.path.join(os.getcwd(), 'log')
|
|
182
|
-
|
|
183
|
-
os.makedirs(f'{log_path}_history', exist_ok=True)
|
|
184
|
-
log_file_list = os.listdir(log_path)
|
|
185
|
-
log_file_list.sort()
|
|
186
|
-
|
|
187
|
-
log_dict = {}
|
|
188
|
-
for log_file in log_file_list:
|
|
189
|
-
log_name = log_file.split('.')[0]
|
|
190
|
-
date = log_file.split('.')[-1]
|
|
191
|
-
if date == 'log':
|
|
192
|
-
continue
|
|
193
|
-
try:
|
|
194
|
-
log_dict[log_name].append(log_file)
|
|
195
|
-
except KeyError:
|
|
196
|
-
log_dict[log_name] = [log_file]
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
for log_name, log_list in log_dict.items():
|
|
200
|
-
for log_file in tqdm(log_list):
|
|
201
|
-
date = log_file.split('.')[-1]
|
|
202
|
-
yyyy = date[:4]
|
|
203
|
-
mm = date[4:6]
|
|
204
|
-
# dd = date[6:]
|
|
205
|
-
move_path = f'{log_path}_history/{yyyy}/{mm}/{log_name}'
|
|
206
|
-
os.makedirs(move_path, exist_ok=True)
|
|
207
|
-
shutil.move(
|
|
208
|
-
f'{log_path}/{log_file}',
|
|
209
|
-
f'{move_path}/{log_file}'
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if __name__ == "__main__":
|
|
214
|
-
root_path = ''
|
|
215
|
-
log_sort(root_path)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|