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/data/jsonlib.py
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/04/01
|
6
|
+
|
7
|
+
from collections import Counter
|
8
|
+
|
9
|
+
from pyxllib.prog.pupil import check_install_package
|
10
|
+
|
11
|
+
check_install_package('jmespath')
|
12
|
+
|
13
|
+
import jmespath
|
14
|
+
|
15
|
+
|
16
|
+
class JsonTool:
|
17
|
+
@classmethod
|
18
|
+
def find_paths_by_condition(cls, obj, condition, current_path=''):
|
19
|
+
"""
|
20
|
+
根据提供的条件递归搜索JSON对象,查找满足条件的路径。
|
21
|
+
"""
|
22
|
+
if isinstance(obj, dict):
|
23
|
+
for k, v in obj.items():
|
24
|
+
new_path = f"{current_path}.{k}" if current_path else k
|
25
|
+
if condition(k, v):
|
26
|
+
yield new_path
|
27
|
+
else:
|
28
|
+
if isinstance(v, (dict, list)):
|
29
|
+
yield from JsonTool.find_paths_by_condition(v, condition, new_path)
|
30
|
+
elif isinstance(obj, list):
|
31
|
+
for index, item in enumerate(obj):
|
32
|
+
new_path = f"{current_path}[{index}]"
|
33
|
+
if isinstance(item, (dict, list)):
|
34
|
+
yield from JsonTool.find_paths_by_condition(item, condition, new_path)
|
35
|
+
|
36
|
+
@classmethod
|
37
|
+
def find_paths_with_key(cls, obj, key, current_path=''):
|
38
|
+
"""
|
39
|
+
查找包含指定键名的路径。
|
40
|
+
"""
|
41
|
+
# 定义一个简单的条件函数,仅基于键名
|
42
|
+
condition = lambda k, v: k == key
|
43
|
+
return JsonTool.find_paths_by_condition(obj, condition, current_path)
|
44
|
+
|
45
|
+
|
46
|
+
class JsonlTool:
|
47
|
+
@classmethod
|
48
|
+
def check_key_positions(cls, json_list, key):
|
49
|
+
"""
|
50
|
+
在JSON对象列表中统计每种包含指定键名的路径出现的次数。
|
51
|
+
|
52
|
+
:param json_list: 包含多个JSON对象的列表。
|
53
|
+
:param key: 要查找的键名。
|
54
|
+
:return: 一个Counter对象,统计每种路径出现的次数。
|
55
|
+
"""
|
56
|
+
paths_counter = Counter()
|
57
|
+
for json_obj in json_list:
|
58
|
+
# 使用JsonTool查找当前对象中包含指定键的路径
|
59
|
+
paths = list(JsonTool.find_paths_with_key(json_obj, key))
|
60
|
+
paths_counter.update(paths)
|
61
|
+
|
62
|
+
return paths_counter
|
63
|
+
|
64
|
+
@classmethod
|
65
|
+
def check_path_values(cls, json_list, jmespath_expression, value_extractor=lambda x: x):
|
66
|
+
"""
|
67
|
+
根据提供的jmespath表达式,在JSON对象列表中直接统计表达式取值的次数。
|
68
|
+
支持自定义函数来获取要统计的键。
|
69
|
+
|
70
|
+
:param json_list: 包含多个JSON对象的列表。
|
71
|
+
:param jmespath_expression: 要应用的jmespath表达式。
|
72
|
+
:param value_extractor: 一个函数,用于从jmespath.search的结果中提取要统计的值。
|
73
|
+
:return: 一个Counter对象,统计提取值出现的次数。
|
74
|
+
"""
|
75
|
+
values_counter = Counter()
|
76
|
+
for json_obj in json_list:
|
77
|
+
|
78
|
+
# 使用jmespath搜索当前对象
|
79
|
+
result = jmespath.search(jmespath_expression, json_obj)
|
80
|
+
# 使用自定义的value_extractor函数提取要统计的值
|
81
|
+
extracted_values = value_extractor(result)
|
82
|
+
if not isinstance(extracted_values, list):
|
83
|
+
extracted_values = [extracted_values]
|
84
|
+
|
85
|
+
for value in extracted_values:
|
86
|
+
values_counter[value] += 1
|
87
|
+
|
88
|
+
values_counter = Counter(dict(values_counter.most_common()))
|
89
|
+
return values_counter
|
@@ -2,20 +2,19 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
# @Author : 陈坤泽
|
4
4
|
# @Email : 877362867@qq.com
|
5
|
-
# @
|
5
|
+
# @Date : 2020/06/15
|
6
6
|
|
7
7
|
"""
|
8
8
|
oss2 · PyPI: https://pypi.org/project/oss2/
|
9
9
|
"""
|
10
10
|
|
11
|
-
import
|
12
|
-
from pyxllib.basic import Path
|
11
|
+
from pyxllib.prog.pupil import check_install_package
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
check_install_package('oss2')
|
14
|
+
|
15
|
+
import oss2
|
16
|
+
|
17
|
+
from pyxllib.file.specialist import File
|
19
18
|
|
20
19
|
|
21
20
|
class OssBucket:
|
@@ -24,6 +23,7 @@ class OssBucket:
|
|
24
23
|
|
25
24
|
def upload(self, key, localfile, if_exists='replace', force=False):
|
26
25
|
""" 如果云端已存在,默认会进行覆盖
|
26
|
+
|
27
27
|
:param key: 上传后存储的文件名
|
28
28
|
:param localfile: 本地文件
|
29
29
|
:param if_exists:
|
@@ -48,6 +48,7 @@ class OssBucket:
|
|
48
48
|
|
49
49
|
def check_exists(self, key):
|
50
50
|
""" 检查一个文件在oss是否存在
|
51
|
+
|
51
52
|
:param key:
|
52
53
|
:return: 存在返回 GetObjectResult 对象,不存在返回False
|
53
54
|
"""
|
@@ -57,7 +58,7 @@ class OssBucket:
|
|
57
58
|
return False
|
58
59
|
|
59
60
|
def download(self, key, localfile):
|
60
|
-
|
61
|
+
File(localfile).ensure_parent()
|
61
62
|
if self.check_exists(key):
|
62
63
|
return self.bucket.get_object_to_file(key, localfile)
|
63
64
|
else:
|
@@ -65,6 +66,7 @@ class OssBucket:
|
|
65
66
|
|
66
67
|
def ObjectIterator(self, **kwargs):
|
67
68
|
""" 遍历某个目录下的所有文件(含子目录里的文件)
|
69
|
+
|
68
70
|
>> print(len(list(oss.ObjectIterator(prefix='histudy/tr/teacher/lateximage/'))))
|
69
71
|
"""
|
70
72
|
return oss2.ObjectIterator(self.bucket, **kwargs)
|