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.
Files changed (186) hide show
  1. pyxllib/__init__.py +9 -2
  2. pyxllib/algo/__init__.py +8 -0
  3. pyxllib/algo/disjoint.py +54 -0
  4. pyxllib/algo/geo.py +541 -0
  5. pyxllib/{util/mathlib.py → algo/intervals.py} +172 -36
  6. pyxllib/algo/matcher.py +389 -0
  7. pyxllib/algo/newbie.py +166 -0
  8. pyxllib/algo/pupil.py +629 -0
  9. pyxllib/algo/shapelylib.py +67 -0
  10. pyxllib/algo/specialist.py +241 -0
  11. pyxllib/algo/stat.py +494 -0
  12. pyxllib/algo/treelib.py +149 -0
  13. pyxllib/algo/unitlib.py +66 -0
  14. pyxllib/autogui/__init__.py +5 -0
  15. pyxllib/autogui/activewin.py +246 -0
  16. pyxllib/autogui/all.py +9 -0
  17. pyxllib/autogui/autogui.py +852 -0
  18. pyxllib/autogui/uiautolib.py +362 -0
  19. pyxllib/autogui/virtualkey.py +102 -0
  20. pyxllib/autogui/wechat.py +827 -0
  21. pyxllib/autogui/wechat_msg.py +421 -0
  22. pyxllib/autogui/wxautolib.py +84 -0
  23. pyxllib/cv/__init__.py +1 -11
  24. pyxllib/cv/expert.py +267 -0
  25. pyxllib/cv/{imlib.py → imfile.py} +18 -83
  26. pyxllib/cv/imhash.py +39 -0
  27. pyxllib/cv/pupil.py +9 -0
  28. pyxllib/cv/rgbfmt.py +1525 -0
  29. pyxllib/cv/slidercaptcha.py +137 -0
  30. pyxllib/cv/trackbartools.py +163 -49
  31. pyxllib/cv/xlcvlib.py +1040 -0
  32. pyxllib/cv/xlpillib.py +423 -0
  33. pyxllib/data/__init__.py +0 -0
  34. pyxllib/data/echarts.py +240 -0
  35. pyxllib/data/jsonlib.py +89 -0
  36. pyxllib/{util/oss2_.py → data/oss.py} +11 -9
  37. pyxllib/data/pglib.py +1127 -0
  38. pyxllib/data/sqlite.py +568 -0
  39. pyxllib/{util → data}/sqllib.py +13 -31
  40. pyxllib/ext/JLineViewer.py +505 -0
  41. pyxllib/ext/__init__.py +6 -0
  42. pyxllib/{util → ext}/demolib.py +119 -35
  43. pyxllib/ext/drissionlib.py +277 -0
  44. pyxllib/ext/kq5034lib.py +12 -0
  45. pyxllib/{util/main.py → ext/old.py} +122 -284
  46. pyxllib/ext/qt.py +449 -0
  47. pyxllib/ext/robustprocfile.py +497 -0
  48. pyxllib/ext/seleniumlib.py +76 -0
  49. pyxllib/{util/tklib.py → ext/tk.py} +10 -11
  50. pyxllib/ext/unixlib.py +827 -0
  51. pyxllib/ext/utools.py +351 -0
  52. pyxllib/{util/webhooklib.py → ext/webhook.py} +45 -17
  53. pyxllib/ext/win32lib.py +40 -0
  54. pyxllib/ext/wjxlib.py +88 -0
  55. pyxllib/ext/wpsapi.py +124 -0
  56. pyxllib/ext/xlwork.py +9 -0
  57. pyxllib/ext/yuquelib.py +1105 -0
  58. pyxllib/file/__init__.py +17 -0
  59. pyxllib/file/docxlib.py +761 -0
  60. pyxllib/{util → file}/gitlib.py +40 -27
  61. pyxllib/file/libreoffice.py +165 -0
  62. pyxllib/file/movielib.py +148 -0
  63. pyxllib/file/newbie.py +10 -0
  64. pyxllib/file/onenotelib.py +1469 -0
  65. pyxllib/file/packlib/__init__.py +330 -0
  66. pyxllib/{util → file/packlib}/zipfile.py +598 -195
  67. pyxllib/file/pdflib.py +426 -0
  68. pyxllib/file/pupil.py +185 -0
  69. pyxllib/file/specialist/__init__.py +685 -0
  70. pyxllib/{basic/_5_dirlib.py → file/specialist/dirlib.py} +364 -93
  71. pyxllib/file/specialist/download.py +193 -0
  72. pyxllib/file/specialist/filelib.py +2829 -0
  73. pyxllib/file/xlsxlib.py +3131 -0
  74. pyxllib/file/xlsyncfile.py +341 -0
  75. pyxllib/prog/__init__.py +5 -0
  76. pyxllib/prog/cachetools.py +64 -0
  77. pyxllib/prog/deprecatedlib.py +233 -0
  78. pyxllib/prog/filelock.py +42 -0
  79. pyxllib/prog/ipyexec.py +253 -0
  80. pyxllib/prog/multiprogs.py +940 -0
  81. pyxllib/prog/newbie.py +451 -0
  82. pyxllib/prog/pupil.py +1197 -0
  83. pyxllib/{sitepackages.py → prog/sitepackages.py} +5 -3
  84. pyxllib/prog/specialist/__init__.py +391 -0
  85. pyxllib/prog/specialist/bc.py +203 -0
  86. pyxllib/prog/specialist/browser.py +497 -0
  87. pyxllib/prog/specialist/common.py +347 -0
  88. pyxllib/prog/specialist/datetime.py +199 -0
  89. pyxllib/prog/specialist/tictoc.py +240 -0
  90. pyxllib/prog/specialist/xllog.py +180 -0
  91. pyxllib/prog/xlosenv.py +108 -0
  92. pyxllib/stdlib/__init__.py +17 -0
  93. pyxllib/{util → stdlib}/tablepyxl/__init__.py +1 -3
  94. pyxllib/{util → stdlib}/tablepyxl/style.py +1 -1
  95. pyxllib/{util → stdlib}/tablepyxl/tablepyxl.py +2 -4
  96. pyxllib/text/__init__.py +8 -0
  97. pyxllib/text/ahocorasick.py +39 -0
  98. pyxllib/text/airscript.js +744 -0
  99. pyxllib/text/charclasslib.py +121 -0
  100. pyxllib/text/jiebalib.py +267 -0
  101. pyxllib/text/jinjalib.py +32 -0
  102. pyxllib/text/jsa_ai_prompt.md +271 -0
  103. pyxllib/text/jscode.py +922 -0
  104. pyxllib/text/latex/__init__.py +158 -0
  105. pyxllib/text/levenshtein.py +303 -0
  106. pyxllib/text/nestenv.py +1215 -0
  107. pyxllib/text/newbie.py +300 -0
  108. pyxllib/text/pupil/__init__.py +8 -0
  109. pyxllib/text/pupil/common.py +1121 -0
  110. pyxllib/text/pupil/xlalign.py +326 -0
  111. pyxllib/text/pycode.py +47 -0
  112. pyxllib/text/specialist/__init__.py +8 -0
  113. pyxllib/text/specialist/common.py +112 -0
  114. pyxllib/text/specialist/ptag.py +186 -0
  115. pyxllib/text/spellchecker.py +172 -0
  116. pyxllib/text/templates/echart_base.html +11 -0
  117. pyxllib/text/templates/highlight_code.html +17 -0
  118. pyxllib/text/templates/latex_editor.html +103 -0
  119. pyxllib/text/vbacode.py +17 -0
  120. pyxllib/text/xmllib.py +747 -0
  121. pyxllib/xl.py +39 -0
  122. pyxllib/xlcv.py +17 -0
  123. pyxllib-0.3.197.dist-info/METADATA +48 -0
  124. pyxllib-0.3.197.dist-info/RECORD +126 -0
  125. {pyxllib-0.0.43.dist-info → pyxllib-0.3.197.dist-info}/WHEEL +4 -5
  126. pyxllib/basic/_1_strlib.py +0 -945
  127. pyxllib/basic/_2_timelib.py +0 -488
  128. pyxllib/basic/_3_pathlib.py +0 -916
  129. pyxllib/basic/_4_loglib.py +0 -419
  130. pyxllib/basic/__init__.py +0 -54
  131. pyxllib/basic/arrow_.py +0 -250
  132. pyxllib/basic/chardet_.py +0 -66
  133. pyxllib/basic/dirlib.py +0 -529
  134. pyxllib/basic/dprint.py +0 -202
  135. pyxllib/basic/extension.py +0 -12
  136. pyxllib/basic/judge.py +0 -31
  137. pyxllib/basic/log.py +0 -204
  138. pyxllib/basic/pathlib_.py +0 -705
  139. pyxllib/basic/pytictoc.py +0 -102
  140. pyxllib/basic/qiniu_.py +0 -61
  141. pyxllib/basic/strlib.py +0 -761
  142. pyxllib/basic/timer.py +0 -132
  143. pyxllib/cv/cv.py +0 -834
  144. pyxllib/cv/cvlib/_1_geo.py +0 -543
  145. pyxllib/cv/cvlib/_2_cvprcs.py +0 -309
  146. pyxllib/cv/cvlib/_2_imgproc.py +0 -594
  147. pyxllib/cv/cvlib/_3_pilprcs.py +0 -80
  148. pyxllib/cv/cvlib/_4_cvimg.py +0 -211
  149. pyxllib/cv/cvlib/__init__.py +0 -10
  150. pyxllib/cv/debugtools.py +0 -82
  151. pyxllib/cv/fitz_.py +0 -300
  152. pyxllib/cv/installer.py +0 -42
  153. pyxllib/debug/_0_installer.py +0 -38
  154. pyxllib/debug/_1_typelib.py +0 -277
  155. pyxllib/debug/_2_chrome.py +0 -198
  156. pyxllib/debug/_3_showdir.py +0 -161
  157. pyxllib/debug/_4_bcompare.py +0 -140
  158. pyxllib/debug/__init__.py +0 -49
  159. pyxllib/debug/bcompare.py +0 -132
  160. pyxllib/debug/chrome.py +0 -198
  161. pyxllib/debug/installer.py +0 -38
  162. pyxllib/debug/showdir.py +0 -158
  163. pyxllib/debug/typelib.py +0 -278
  164. pyxllib/image/__init__.py +0 -12
  165. pyxllib/torch/__init__.py +0 -20
  166. pyxllib/torch/modellib.py +0 -37
  167. pyxllib/torch/trainlib.py +0 -344
  168. pyxllib/util/__init__.py +0 -20
  169. pyxllib/util/aip_.py +0 -141
  170. pyxllib/util/casiadb.py +0 -59
  171. pyxllib/util/excellib.py +0 -495
  172. pyxllib/util/filelib.py +0 -612
  173. pyxllib/util/jsondata.py +0 -27
  174. pyxllib/util/jsondata2.py +0 -92
  175. pyxllib/util/labelmelib.py +0 -139
  176. pyxllib/util/onepy/__init__.py +0 -29
  177. pyxllib/util/onepy/onepy.py +0 -574
  178. pyxllib/util/onepy/onmanager.py +0 -170
  179. pyxllib/util/pyautogui_.py +0 -219
  180. pyxllib/util/textlib.py +0 -1305
  181. pyxllib/util/unorder.py +0 -22
  182. pyxllib/util/xmllib.py +0 -639
  183. pyxllib-0.0.43.dist-info/METADATA +0 -39
  184. pyxllib-0.0.43.dist-info/RECORD +0 -80
  185. pyxllib-0.0.43.dist-info/top_level.txt +0 -1
  186. {pyxllib-0.0.43.dist-info → pyxllib-0.3.197.dist-info/licenses}/LICENSE +0 -0
@@ -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
- # @Data : 2020/06/15
5
+ # @Date : 2020/06/15
6
6
 
7
7
  """
8
8
  oss2 · PyPI: https://pypi.org/project/oss2/
9
9
  """
10
10
 
11
- import subprocess
12
- from pyxllib.basic import Path
11
+ from pyxllib.prog.pupil import check_install_package
13
12
 
14
- try:
15
- import oss2
16
- except ModuleNotFoundError:
17
- subprocess.run(['pip', 'install', 'oss2'])
18
- import oss2
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
- Path(localfile).ensure_dir()
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)