pyxllib 0.0.43__py3-none-any.whl → 0.3.197__py3-none-any.whl
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.
- pyxllib/__init__.py +9 -2
- pyxllib/algo/__init__.py +8 -0
- pyxllib/algo/disjoint.py +54 -0
- pyxllib/algo/geo.py +541 -0
- pyxllib/{util/mathlib.py → algo/intervals.py} +172 -36
- pyxllib/algo/matcher.py +389 -0
- pyxllib/algo/newbie.py +166 -0
- pyxllib/algo/pupil.py +629 -0
- pyxllib/algo/shapelylib.py +67 -0
- pyxllib/algo/specialist.py +241 -0
- pyxllib/algo/stat.py +494 -0
- pyxllib/algo/treelib.py +149 -0
- pyxllib/algo/unitlib.py +66 -0
- pyxllib/autogui/__init__.py +5 -0
- pyxllib/autogui/activewin.py +246 -0
- pyxllib/autogui/all.py +9 -0
- pyxllib/autogui/autogui.py +852 -0
- pyxllib/autogui/uiautolib.py +362 -0
- pyxllib/autogui/virtualkey.py +102 -0
- pyxllib/autogui/wechat.py +827 -0
- pyxllib/autogui/wechat_msg.py +421 -0
- pyxllib/autogui/wxautolib.py +84 -0
- pyxllib/cv/__init__.py +1 -11
- pyxllib/cv/expert.py +267 -0
- pyxllib/cv/{imlib.py → imfile.py} +18 -83
- pyxllib/cv/imhash.py +39 -0
- pyxllib/cv/pupil.py +9 -0
- pyxllib/cv/rgbfmt.py +1525 -0
- pyxllib/cv/slidercaptcha.py +137 -0
- pyxllib/cv/trackbartools.py +163 -49
- pyxllib/cv/xlcvlib.py +1040 -0
- pyxllib/cv/xlpillib.py +423 -0
- pyxllib/data/__init__.py +0 -0
- pyxllib/data/echarts.py +240 -0
- pyxllib/data/jsonlib.py +89 -0
- pyxllib/{util/oss2_.py → data/oss.py} +11 -9
- pyxllib/data/pglib.py +1127 -0
- pyxllib/data/sqlite.py +568 -0
- pyxllib/{util → data}/sqllib.py +13 -31
- pyxllib/ext/JLineViewer.py +505 -0
- pyxllib/ext/__init__.py +6 -0
- pyxllib/{util → ext}/demolib.py +119 -35
- pyxllib/ext/drissionlib.py +277 -0
- pyxllib/ext/kq5034lib.py +12 -0
- pyxllib/{util/main.py → ext/old.py} +122 -284
- pyxllib/ext/qt.py +449 -0
- pyxllib/ext/robustprocfile.py +497 -0
- pyxllib/ext/seleniumlib.py +76 -0
- pyxllib/{util/tklib.py → ext/tk.py} +10 -11
- pyxllib/ext/unixlib.py +827 -0
- pyxllib/ext/utools.py +351 -0
- pyxllib/{util/webhooklib.py → ext/webhook.py} +45 -17
- pyxllib/ext/win32lib.py +40 -0
- pyxllib/ext/wjxlib.py +88 -0
- pyxllib/ext/wpsapi.py +124 -0
- pyxllib/ext/xlwork.py +9 -0
- pyxllib/ext/yuquelib.py +1105 -0
- pyxllib/file/__init__.py +17 -0
- pyxllib/file/docxlib.py +761 -0
- pyxllib/{util → file}/gitlib.py +40 -27
- pyxllib/file/libreoffice.py +165 -0
- pyxllib/file/movielib.py +148 -0
- pyxllib/file/newbie.py +10 -0
- pyxllib/file/onenotelib.py +1469 -0
- pyxllib/file/packlib/__init__.py +330 -0
- pyxllib/{util → file/packlib}/zipfile.py +598 -195
- pyxllib/file/pdflib.py +426 -0
- pyxllib/file/pupil.py +185 -0
- pyxllib/file/specialist/__init__.py +685 -0
- pyxllib/{basic/_5_dirlib.py → file/specialist/dirlib.py} +364 -93
- pyxllib/file/specialist/download.py +193 -0
- pyxllib/file/specialist/filelib.py +2829 -0
- pyxllib/file/xlsxlib.py +3131 -0
- pyxllib/file/xlsyncfile.py +341 -0
- pyxllib/prog/__init__.py +5 -0
- pyxllib/prog/cachetools.py +64 -0
- pyxllib/prog/deprecatedlib.py +233 -0
- pyxllib/prog/filelock.py +42 -0
- pyxllib/prog/ipyexec.py +253 -0
- pyxllib/prog/multiprogs.py +940 -0
- pyxllib/prog/newbie.py +451 -0
- pyxllib/prog/pupil.py +1197 -0
- pyxllib/{sitepackages.py → prog/sitepackages.py} +5 -3
- pyxllib/prog/specialist/__init__.py +391 -0
- pyxllib/prog/specialist/bc.py +203 -0
- pyxllib/prog/specialist/browser.py +497 -0
- pyxllib/prog/specialist/common.py +347 -0
- pyxllib/prog/specialist/datetime.py +199 -0
- pyxllib/prog/specialist/tictoc.py +240 -0
- pyxllib/prog/specialist/xllog.py +180 -0
- pyxllib/prog/xlosenv.py +108 -0
- pyxllib/stdlib/__init__.py +17 -0
- pyxllib/{util → stdlib}/tablepyxl/__init__.py +1 -3
- pyxllib/{util → stdlib}/tablepyxl/style.py +1 -1
- pyxllib/{util → stdlib}/tablepyxl/tablepyxl.py +2 -4
- pyxllib/text/__init__.py +8 -0
- pyxllib/text/ahocorasick.py +39 -0
- pyxllib/text/airscript.js +744 -0
- pyxllib/text/charclasslib.py +121 -0
- pyxllib/text/jiebalib.py +267 -0
- pyxllib/text/jinjalib.py +32 -0
- pyxllib/text/jsa_ai_prompt.md +271 -0
- pyxllib/text/jscode.py +922 -0
- pyxllib/text/latex/__init__.py +158 -0
- pyxllib/text/levenshtein.py +303 -0
- pyxllib/text/nestenv.py +1215 -0
- pyxllib/text/newbie.py +300 -0
- pyxllib/text/pupil/__init__.py +8 -0
- pyxllib/text/pupil/common.py +1121 -0
- pyxllib/text/pupil/xlalign.py +326 -0
- pyxllib/text/pycode.py +47 -0
- pyxllib/text/specialist/__init__.py +8 -0
- pyxllib/text/specialist/common.py +112 -0
- pyxllib/text/specialist/ptag.py +186 -0
- pyxllib/text/spellchecker.py +172 -0
- pyxllib/text/templates/echart_base.html +11 -0
- pyxllib/text/templates/highlight_code.html +17 -0
- pyxllib/text/templates/latex_editor.html +103 -0
- pyxllib/text/vbacode.py +17 -0
- pyxllib/text/xmllib.py +747 -0
- pyxllib/xl.py +39 -0
- pyxllib/xlcv.py +17 -0
- pyxllib-0.3.197.dist-info/METADATA +48 -0
- pyxllib-0.3.197.dist-info/RECORD +126 -0
- {pyxllib-0.0.43.dist-info → pyxllib-0.3.197.dist-info}/WHEEL +4 -5
- pyxllib/basic/_1_strlib.py +0 -945
- pyxllib/basic/_2_timelib.py +0 -488
- pyxllib/basic/_3_pathlib.py +0 -916
- pyxllib/basic/_4_loglib.py +0 -419
- pyxllib/basic/__init__.py +0 -54
- pyxllib/basic/arrow_.py +0 -250
- pyxllib/basic/chardet_.py +0 -66
- pyxllib/basic/dirlib.py +0 -529
- pyxllib/basic/dprint.py +0 -202
- pyxllib/basic/extension.py +0 -12
- pyxllib/basic/judge.py +0 -31
- pyxllib/basic/log.py +0 -204
- pyxllib/basic/pathlib_.py +0 -705
- pyxllib/basic/pytictoc.py +0 -102
- pyxllib/basic/qiniu_.py +0 -61
- pyxllib/basic/strlib.py +0 -761
- pyxllib/basic/timer.py +0 -132
- pyxllib/cv/cv.py +0 -834
- pyxllib/cv/cvlib/_1_geo.py +0 -543
- pyxllib/cv/cvlib/_2_cvprcs.py +0 -309
- pyxllib/cv/cvlib/_2_imgproc.py +0 -594
- pyxllib/cv/cvlib/_3_pilprcs.py +0 -80
- pyxllib/cv/cvlib/_4_cvimg.py +0 -211
- pyxllib/cv/cvlib/__init__.py +0 -10
- pyxllib/cv/debugtools.py +0 -82
- pyxllib/cv/fitz_.py +0 -300
- pyxllib/cv/installer.py +0 -42
- pyxllib/debug/_0_installer.py +0 -38
- pyxllib/debug/_1_typelib.py +0 -277
- pyxllib/debug/_2_chrome.py +0 -198
- pyxllib/debug/_3_showdir.py +0 -161
- pyxllib/debug/_4_bcompare.py +0 -140
- pyxllib/debug/__init__.py +0 -49
- pyxllib/debug/bcompare.py +0 -132
- pyxllib/debug/chrome.py +0 -198
- pyxllib/debug/installer.py +0 -38
- pyxllib/debug/showdir.py +0 -158
- pyxllib/debug/typelib.py +0 -278
- pyxllib/image/__init__.py +0 -12
- pyxllib/torch/__init__.py +0 -20
- pyxllib/torch/modellib.py +0 -37
- pyxllib/torch/trainlib.py +0 -344
- pyxllib/util/__init__.py +0 -20
- pyxllib/util/aip_.py +0 -141
- pyxllib/util/casiadb.py +0 -59
- pyxllib/util/excellib.py +0 -495
- pyxllib/util/filelib.py +0 -612
- pyxllib/util/jsondata.py +0 -27
- pyxllib/util/jsondata2.py +0 -92
- pyxllib/util/labelmelib.py +0 -139
- pyxllib/util/onepy/__init__.py +0 -29
- pyxllib/util/onepy/onepy.py +0 -574
- pyxllib/util/onepy/onmanager.py +0 -170
- pyxllib/util/pyautogui_.py +0 -219
- pyxllib/util/textlib.py +0 -1305
- pyxllib/util/unorder.py +0 -22
- pyxllib/util/xmllib.py +0 -639
- pyxllib-0.0.43.dist-info/METADATA +0 -39
- pyxllib-0.0.43.dist-info/RECORD +0 -80
- pyxllib-0.0.43.dist-info/top_level.txt +0 -1
- {pyxllib-0.0.43.dist-info → pyxllib-0.3.197.dist-info/licenses}/LICENSE +0 -0
pyxllib/algo/newbie.py
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2021/06/06 10:51
|
6
|
+
|
7
|
+
from pyxllib.prog.newbie import round_int
|
8
|
+
|
9
|
+
|
10
|
+
def vector_compare(x, y):
|
11
|
+
"""
|
12
|
+
:param x: 一个数值向量
|
13
|
+
:param y: 一个数值向量,理论上长度要跟x相同
|
14
|
+
:return: 返回<、=、>、?
|
15
|
+
=,各个位置的数值都相同
|
16
|
+
<,x各个位置的值都≤y,且至少有一处值<y
|
17
|
+
>,x各个位置的值都≥,且至少有一处值>y
|
18
|
+
?,其他情况,x、y各有优劣
|
19
|
+
|
20
|
+
>>> vector_compare([1, 2, 3], [1, 3, 3])
|
21
|
+
'<'
|
22
|
+
>>> vector_compare([1, 2, 3], [1, 1, 4])
|
23
|
+
'?'
|
24
|
+
>>> vector_compare({'a': 1, 'b': 2}, {'a': 1, 'b': 2, 'c': 0})
|
25
|
+
'='
|
26
|
+
>>> vector_compare({'b': 3, 'a': 1}, {'a': 1, 'b': 2, 'c': 0})
|
27
|
+
'>'
|
28
|
+
>>> vector_compare({'b': 3, 'a': 1}, {'a': 1, 'b': 2, 'c': 1})
|
29
|
+
'?'
|
30
|
+
"""
|
31
|
+
# 1 不同数据类型处理
|
32
|
+
if isinstance(x, dict) and isinstance(y, dict):
|
33
|
+
# 字典比较比较特别,要先做个映射
|
34
|
+
keys = set(x.keys()) | set(y.keys())
|
35
|
+
a = [x.get(k, 0) - y.get(k, 0) for k in keys]
|
36
|
+
else:
|
37
|
+
a = [i - j for i, j in zip(x, y)]
|
38
|
+
|
39
|
+
# 2 算法
|
40
|
+
n, m = max(a), min(a)
|
41
|
+
if n == m == 0:
|
42
|
+
return '='
|
43
|
+
elif n <= 0:
|
44
|
+
return '<'
|
45
|
+
elif m >= 0:
|
46
|
+
return '>'
|
47
|
+
else:
|
48
|
+
return '?'
|
49
|
+
|
50
|
+
|
51
|
+
def round_unit(x, unit):
|
52
|
+
""" 按特定单位量对x取倍率
|
53
|
+
|
54
|
+
round_int偏向于工程代码简化,round_unit偏向算法,功能不太一样,所以分组不同
|
55
|
+
|
56
|
+
Args:
|
57
|
+
x: 原值
|
58
|
+
unit: 单位量
|
59
|
+
|
60
|
+
Returns: 新值,是unit的整数倍
|
61
|
+
|
62
|
+
>>> round_unit(1.2, 0.5)
|
63
|
+
1.0
|
64
|
+
>>> round_unit(1.6, 0.5)
|
65
|
+
1.5
|
66
|
+
>>> round_unit(7, 5)
|
67
|
+
5
|
68
|
+
>>> round_unit(13, 5)
|
69
|
+
15
|
70
|
+
"""
|
71
|
+
return round_int(x / unit) * unit
|
72
|
+
|
73
|
+
|
74
|
+
def int2excel_col_name(d):
|
75
|
+
"""
|
76
|
+
>>> int2excel_col_name(1)
|
77
|
+
'A'
|
78
|
+
>>> int2excel_col_name(28)
|
79
|
+
'AB'
|
80
|
+
>>> int2excel_col_name(100)
|
81
|
+
'CV'
|
82
|
+
"""
|
83
|
+
s = []
|
84
|
+
while d:
|
85
|
+
t = (d - 1) % 26
|
86
|
+
s.append(chr(65 + t))
|
87
|
+
d = (d - 1) // 26
|
88
|
+
return ''.join(reversed(s))
|
89
|
+
|
90
|
+
|
91
|
+
def excel_col_name2int(s):
|
92
|
+
"""
|
93
|
+
>>> excel_col_name2int('A')
|
94
|
+
1
|
95
|
+
>>> excel_col_name2int('AA')
|
96
|
+
27
|
97
|
+
>>> excel_col_name2int('AB')
|
98
|
+
28
|
99
|
+
"""
|
100
|
+
d = 0
|
101
|
+
for ch in s:
|
102
|
+
d = d * 26 + (ord(ch.upper()) - 64)
|
103
|
+
return d
|
104
|
+
|
105
|
+
|
106
|
+
def gentuple(n, tag):
|
107
|
+
""" 有点类似range函数,但生成的数列更加灵活
|
108
|
+
|
109
|
+
:param n:
|
110
|
+
数组长度
|
111
|
+
:param tag:
|
112
|
+
int类型,从指定数字开始编号
|
113
|
+
0,从0开始编号
|
114
|
+
1,从1开始编号
|
115
|
+
'A',用Excel的形式编号
|
116
|
+
tuple,按枚举值循环显示
|
117
|
+
('A', 'B'):循环使用A、B编号
|
118
|
+
|
119
|
+
>>> gentuple(4, 'A')
|
120
|
+
('A', 'B', 'C', 'D')
|
121
|
+
"""
|
122
|
+
a = [''] * n
|
123
|
+
if isinstance(tag, int):
|
124
|
+
for i in range(n):
|
125
|
+
a[i] = i + tag
|
126
|
+
elif tag == 'A':
|
127
|
+
a = tuple(map(lambda x: int2excel_col_name(x + 1), range(n)))
|
128
|
+
elif isinstance(tag, (list, tuple)):
|
129
|
+
k = len(tag)
|
130
|
+
a = tuple(map(lambda x: tag[x % k], range(n)))
|
131
|
+
return a
|
132
|
+
|
133
|
+
|
134
|
+
def cvsecs(time):
|
135
|
+
""" 从moviepy抄来的,任何时间格式转秒数的功能
|
136
|
+
Will convert any time into seconds.
|
137
|
+
|
138
|
+
If the type of `time` is not valid,
|
139
|
+
it's returned as is.
|
140
|
+
|
141
|
+
Here are the accepted formats::
|
142
|
+
|
143
|
+
>>> cvsecs(15.4) # seconds
|
144
|
+
15.4
|
145
|
+
>>> cvsecs((1, 21.5)) # (min,sec)
|
146
|
+
81.5
|
147
|
+
>>> cvsecs((1, 1, 2)) # (hr, min, sec)
|
148
|
+
3662
|
149
|
+
>>> cvsecs('01:01:33.045')
|
150
|
+
3693.045
|
151
|
+
>>> cvsecs('01:01:33,5') # coma works too
|
152
|
+
3693.5
|
153
|
+
>>> cvsecs('1:33,5') # only minutes and secs
|
154
|
+
99.5
|
155
|
+
>>> cvsecs('33.5') # only secs
|
156
|
+
33.5
|
157
|
+
"""
|
158
|
+
factors = (1, 60, 3600)
|
159
|
+
|
160
|
+
if isinstance(time, str):
|
161
|
+
time = [float(f.replace(',', '.')) for f in time.split(':')]
|
162
|
+
|
163
|
+
if not isinstance(time, (tuple, list)):
|
164
|
+
return time
|
165
|
+
|
166
|
+
return sum(mult * part for mult, part in zip(factors, reversed(time)))
|