pyxllib 0.3.200__py3-none-any.whl → 3.201.1__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 CHANGED
@@ -12,10 +12,3 @@
12
12
 
13
13
  文档:https://www.yuque.com/xlpr/pyxllib/home/edit
14
14
  """
15
-
16
- import sys
17
-
18
- if sys.version_info.major == 3 and sys.version_info.minor >= 8:
19
- import importlib.metadata
20
-
21
- version = importlib.metadata.version('pyxllib')
pyxllib/algo/geo.py CHANGED
@@ -9,10 +9,6 @@
9
9
  specialist级别
10
10
  """
11
11
 
12
- from pyxllib.prog.pupil import check_install_package
13
-
14
- check_install_package('cv2', 'opencv-python')
15
-
16
12
  import copy
17
13
 
18
14
  import numpy as np
pyxllib/algo/treelib.py CHANGED
@@ -8,10 +8,6 @@
8
8
  树形结构相关的处理
9
9
  """
10
10
 
11
- from pyxllib.prog.pupil import check_install_package
12
-
13
- check_install_package('anytree')
14
-
15
11
  import re
16
12
 
17
13
  from anytree import Node
pyxllib/algo/unitlib.py CHANGED
@@ -6,10 +6,6 @@
6
6
 
7
7
  """ 单位功能库 """
8
8
 
9
- from pyxllib.prog.pupil import check_install_package
10
-
11
- check_install_package('pint')
12
-
13
9
  import pint
14
10
 
15
11
  import pandas as pd
@@ -19,13 +19,8 @@ if sys.platform == 'win32':
19
19
  import pyautogui
20
20
  import win32gui
21
21
 
22
- try:
23
- import pyscreeze # NOQA pyautogui安装的时候会自动安装依赖的pyscreeze
24
- except ModuleNotFoundError:
25
- pass
26
-
27
22
  from pyxllib.prog.newbie import first_nonnone, round_int
28
- from pyxllib.prog.pupil import xlwait, DictTool, check_install_package
23
+ from pyxllib.prog.pupil import xlwait, DictTool
29
24
  from pyxllib.prog.specialist import TicToc
30
25
  from pyxllib.algo.geo import ComputeIou, ltrb2xywh, xywh2ltrb, ltrb2polygon
31
26
  from pyxllib.algo.shapelylib import ShapelyPolygon
@@ -646,7 +641,6 @@ def type_text(text):
646
641
 
647
642
  这种需求一般也可以用剪切板实现,但是剪切板不够独立轻量,可能会有意想不到的副作用
648
643
  """
649
- check_install_package('pynput')
650
644
  from pynput.keyboard import Controller
651
645
 
652
646
  keyboard = Controller()
pyxllib/data/echarts.py CHANGED
@@ -10,10 +10,6 @@ Apache ECharts: https://echarts.apache.org/zh/index.html
10
10
  python版:pyechats的封装
11
11
  """
12
12
 
13
- from pyxllib.prog.pupil import check_install_package
14
-
15
- check_install_package('pyecharts')
16
-
17
13
  # import types
18
14
 
19
15
  import pyecharts
pyxllib/data/jsonlib.py CHANGED
@@ -6,10 +6,6 @@
6
6
 
7
7
  from collections import Counter
8
8
 
9
- from pyxllib.prog.pupil import check_install_package
10
-
11
- check_install_package('jmespath')
12
-
13
9
  import jmespath
14
10
 
15
11
 
pyxllib/data/pglib.py CHANGED
@@ -8,25 +8,9 @@
8
8
  针对PostgreSQL封装的工具
9
9
  """
10
10
 
11
- import os
12
11
  import sys
13
12
 
14
- from pyxllib.prog.pupil import check_install_package
15
- from pyxllib.file.specialist import XlPath, ensure_localdir
16
-
17
- # 使用binary安装,好像就不需要自己配置依赖了
18
- # if sys.platform == 'win32':
19
- # # windows系统中pg的默认安装位置
20
- # # https://www.yuque.com/xlpr/pyxllib/install_psycopg
21
- # pgdll_dir = XlPath('C:/Program Files/PostgreSQL/14/bin')
22
- # if not pgdll_dir.is_dir(): # 换一个自定义目录继续检查
23
- # pgdll_dir = XlPath.userdir() / '.xlpr/pgdll'
24
- # if not pgdll_dir.is_dir():
25
- # print('没有PostgreSQL对应的dll文件,自动下载:')
26
- # ensure_localdir(pgdll_dir, 'https://xmutpriu.com/download/pgdll_v14.zip')
27
- # os.environ['PATH'] += ';' + pgdll_dir.as_posix()
28
-
29
- check_install_package('psycopg', 'psycopg[binary]')
13
+ from pyxllib.file.specialist import XlPath
30
14
 
31
15
  import io
32
16
  from collections import Counter
pyxllib/ext/demolib.py CHANGED
@@ -15,7 +15,12 @@ test:测试代码,注重分析功能稳定性
15
15
  perf:性能测试,注重分析代码的运行效率
16
16
  """
17
17
 
18
- from pyxllib.xl import *
18
+ import re
19
+
20
+ from pyxllib.prog.pupil import dprint, dformat
21
+ from pyxllib.prog.specialist import Timer, TicToc
22
+ from pyxllib.file.pupil import getfiles
23
+ from pyxllib.file.specialist import mygetfiles
19
24
 
20
25
  ____stdlib = """
21
26
  标准库相关
@@ -10,10 +10,6 @@
10
10
  半定制化的功能组件
11
11
  """
12
12
 
13
- from pyxllib.prog.pupil import check_install_package
14
-
15
- check_install_package('joblib')
16
-
17
13
  from collections import defaultdict, Counter
18
14
  import datetime
19
15
  import re
pyxllib/ext/unixlib.py CHANGED
@@ -3,14 +3,8 @@
3
3
  # @Author : 陈坤泽
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2021/06/03 20:41
6
- import time
7
-
8
- from pyxllib.prog.pupil import check_install_package
9
6
 
10
- check_install_package('paramiko')
11
- check_install_package('scp')
12
- # 对 paramiko 进一步封装的库
13
- # check_install_package('fabric')
7
+ import time
14
8
 
15
9
  import warnings
16
10
  from cryptography.utils import CryptographyDeprecationWarning
pyxllib/ext/utools.py CHANGED
@@ -6,12 +6,6 @@
6
6
 
7
7
  """ 专门给utools的快捷命令扩展的一系列python工具库
8
8
  """
9
- from pyxllib.prog.pupil import check_install_package
10
-
11
- check_install_package('fire')
12
- check_install_package('humanfriendly')
13
- check_install_package('pandas')
14
- check_install_package('pyautogui', 'PyAutoGui') # 其实pip install不区分大小写,不过官方这里安装是驼峰名
15
9
 
16
10
  import datetime
17
11
  import json
pyxllib/ext/wjxlib.py CHANGED
@@ -21,19 +21,22 @@ class WjxWeb(DpWebBase):
21
21
  """ 问卷星网页的爬虫 """
22
22
 
23
23
  def __init__(self, url=None):
24
- super().__init__(url or 'https://www.wjx.cn')
24
+ super().__init__('https://www.wjx.cn/login.aspx')
25
25
  self.login()
26
+ self.tab.get(url)
26
27
 
27
28
  def login(self):
28
29
  tab = self.tab
29
30
 
30
31
  if tab.url.startswith('https://www.wjx.cn/wjx/activitystat/resultlimit.aspx'):
31
- tab('tag:a@@text():登录').click()
32
-
33
- if tab.url.lower().startswith('https://www.wjx.cn/login.aspx'):
34
- tab('tag:input@@name=UserName').input(os.getenv('WJX_USERNAME'), clear=True)
35
- tab('tag:input@@name=Password').input(os.getenv('WJX_PASSWORD'), clear=True)
36
- tab('tag:input@@type=submit').click()
32
+ tab('t:a@@text():登录').click()
33
+
34
+ if tab.url.startswith('https://www.wjx.cn/login.aspx'):
35
+ tab('t:input@@name=UserName').input(os.getenv('WJX_USERNAME'), clear=True)
36
+ tab('t:input@@name=Password').input(os.getenv('WJX_PASSWORD'), clear=True)
37
+ tab('t:label@@for=RememberMe').click()
38
+ time.sleep(2)
39
+ tab('t:input@@type=submit').click()
37
40
 
38
41
  def get_page_num(self):
39
42
  """
pyxllib/ext/yuquelib.py CHANGED
@@ -3,23 +3,28 @@
3
3
  # @Author : 陈坤泽
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2024/01/01
6
+
7
+ import os
6
8
  import html
7
9
  import re
8
10
  import time
9
11
  from enum import Enum
12
+ import pprint
13
+ import json
10
14
 
11
15
  import requests
12
16
  import urllib.parse
17
+ import pandas as pd
13
18
 
14
19
  from fastcore.basics import GetAttr
15
- from pprint import pprint
20
+ from loguru import logger
16
21
 
17
- from pyxllib.xl import *
18
- from pyxllib.algo.stat import *
19
22
  from pyxllib.prog.newbie import SingletonForEveryInitArgs
20
- from pyxllib.text.pupil import UrlQueryBuilder
23
+ from pyxllib.prog.pupil import run_once
24
+ from pyxllib.text.pupil import UrlQueryBuilder, shorten
21
25
  from pyxllib.text.nestenv import NestEnv
22
26
  from pyxllib.text.xmllib import BeautifulSoup, XlBs4Tag
27
+ from pyxllib.file.specialist import refinepath, XlPath
23
28
  from pyxllib.cv.xlcvlib import xlcv
24
29
 
25
30
 
pyxllib/file/docxlib.py CHANGED
@@ -4,10 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2021/08/31 09:56
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- check_install_package('win32com', 'pywin32')
10
- check_install_package('docx', 'python-docx')
11
7
 
12
8
  import json
13
9
  import os
pyxllib/file/movielib.py CHANGED
@@ -4,10 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2022/02/25 17:54
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- check_install_package('moviepy')
10
-
11
7
  import cv2
12
8
  from moviepy.editor import VideoFileClip
13
9
  from moviepy.editor import cvsecs
pyxllib/file/pdflib.py CHANGED
@@ -4,9 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2020/06/02 16:06
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- check_install_package('fitz', 'PyMuPdf>=1.18.17')
10
7
 
11
8
  import json
12
9
  import os
@@ -91,7 +88,6 @@ class FitzDoc:
91
88
 
92
89
  def to_docx(self, docx_file=None):
93
90
  """ pdf转docx """
94
- check_install_package('pdf2docx')
95
91
  from pdf2docx import parse
96
92
 
97
93
  pdf_file = self.src_file
@@ -3,11 +3,7 @@
3
3
  # @Author : 陈坤泽
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2021/06/06 17:46
6
- import re
7
6
 
8
- from pyxllib.prog.pupil import check_install_package
9
-
10
- check_install_package('joblib', 'joblib>=1.3.2')
11
7
 
12
8
  from collections import OrderedDict
13
9
  import sqlite3
@@ -4,9 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2020/05/30 20:37
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- check_install_package('filetype')
10
7
 
11
8
  from typing import Callable, Any
12
9
  import io
@@ -24,7 +21,6 @@ import math
24
21
  from itertools import islice
25
22
  import datetime
26
23
 
27
- # import chardet
28
24
  import charset_normalizer
29
25
  import qiniu
30
26
  import requests
pyxllib/file/xlsxlib.py CHANGED
@@ -7,18 +7,9 @@
7
7
  """
8
8
  扩展了些自己的openpyxl工具
9
9
  """
10
- import copy
11
10
 
11
+ import copy
12
12
  import time
13
-
14
- from pyxllib.prog.pupil import check_install_package, run_once
15
-
16
- check_install_package('openpyxl')
17
- # check_install_package('premailer')
18
- # check_install_package('xlrd2')
19
- check_install_package('yattag')
20
- check_install_package('jsonpickle')
21
-
22
13
  from collections import Counter, OrderedDict, defaultdict
23
14
  import csv
24
15
  import datetime
@@ -48,7 +39,7 @@ except ModuleNotFoundError:
48
39
 
49
40
  from pyxllib.prog.newbie import human_readable_number
50
41
  from pyxllib.prog.pupil import (inject_members, dprint, xlmd5, shuffle_dict_keys, Timeout,
51
- safe_div, format_exception, DictTool)
42
+ safe_div, format_exception, DictTool, run_once)
52
43
  from pyxllib.prog.specialist import browser, TicToc
53
44
  from pyxllib.algo.specialist import product
54
45
  from pyxllib.text.pupil import calc_chinese_ratio
@@ -4,13 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2024/05/29
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- # cachetools,通用缓存工具,适用范围更广
10
- check_install_package('cachetools')
11
- # cached-property,类属性特用工具,相对比较简洁些
12
- check_install_package('cached_property', 'cached-property')
13
-
14
7
  # 对于普通函数,一般用lru_cache即可
15
8
  from functools import lru_cache
16
9
  import threading
@@ -37,6 +30,7 @@ def xlcache(maxsize=128, *, ttl=None, lock=None, property=False):
37
30
  而是外部再加一层@property,不然IDE会识别不了这是一个property,影响开发
38
31
 
39
32
  """
33
+
40
34
  def decorator(func):
41
35
  if property:
42
36
  if ttl is not None:
pyxllib/prog/pupil.py CHANGED
@@ -386,6 +386,17 @@ class EnchantBase:
386
386
  raise NotImplementedError
387
387
 
388
388
 
389
+ def check_package(package, speccal_install_name=None):
390
+ """ 250418周五16:36,check_install_package的简化版本,只检查、报错,提示安装依赖,但不自动进行安装
391
+ """
392
+ try:
393
+ __import__(package)
394
+ except ModuleNotFoundError:
395
+ cmds = [sys.executable, "-m", "pip", "install"]
396
+ cmds.append(speccal_install_name if speccal_install_name else package)
397
+ raise ModuleNotFoundError(f'缺少依赖包:{package},请自行安装扩展依赖:{cmds}\n')
398
+
399
+
389
400
  def check_install_package(package, speccal_install_name=None, *, user=False):
390
401
  """ https://stackoverflow.com/questions/12332975/installing-python-module-within-code
391
402
 
@@ -90,49 +90,6 @@ def mtqdm(func, iterable, *args, max_workers=1, check_per_seconds=0.01, **kwargs
90
90
  executor.shutdown()
91
91
 
92
92
 
93
- def distribute_package(root, version=None, repository=None, *,
94
- upload=True,
95
- version_file='setup.py',
96
- delete_dist=True):
97
- """ 发布包的工具函数
98
-
99
- :param root: 项目的根目录,例如 'D:/slns/pyxllib'
100
- 根目录下有对应的 setup.py 等文件
101
- :param repository: 比如我配置了 [xlpr],就可以传入 'xlpr'
102
- :param version_file: 保存版本号的文件,注意看正则规则,需要满足特定的范式,才会自动更新版本号
103
- :param delete_dist: 上传完是否自动删除dist目录,要检查上传包是否有遗漏时,要关闭
104
- """
105
- import sys
106
- from pyxllib.file.specialist import XlPath
107
-
108
- # 1 切换工作目录
109
- os.chdir(str(root))
110
-
111
- # 2 改版本号
112
- if version:
113
- f = XlPath(root) / version_file
114
- s = re.sub(r"(version\s*=\s*)(['\"])(.+?)(\2)", fr'\1\g<2>{version}\4', f.read_text())
115
- f.write_text(s)
116
-
117
- # 3 打包
118
- subprocess.run(f'{sys.executable} setup.py sdist')
119
-
120
- # 4 上传
121
- if upload:
122
- # 上传
123
- cmd = 'twine upload dist/*'
124
- if repository:
125
- cmd += f' -r {repository}'
126
- subprocess.run(cmd)
127
- # 删除打包生成的中间文件
128
- if delete_dist:
129
- XlPath('dist').delete()
130
- XlPath('build').delete()
131
-
132
- # 这个不能删,不然importlib会读取不到模块的版本号
133
- # [d.delete() for d in XlPath('.').select_dirs(r'*.egg-info')]
134
-
135
-
136
93
  def estimate_package_size(package):
137
94
  """ 估计一个库占用的存储大小 """
138
95
 
pyxllib/prog/xlosenv.py CHANGED
@@ -4,6 +4,8 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2024/10/30
6
6
 
7
+ # from pyxllib.prog.pupil import check_package
8
+ # check_package('envariable')
7
9
 
8
10
  import os
9
11
  import json
@@ -4,9 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2021/06/06 16:57
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- check_install_package('ahocorasick', 'pyahocorasick')
10
7
 
11
8
  from collections import Counter
12
9
  import re
pyxllib/text/airscript.js CHANGED
@@ -742,3 +742,13 @@ function extendFormatConditionsToFullColumns(ws) {
742
742
  }
743
743
  }
744
744
  }
745
+
746
+ function 新建一条条件格式() {
747
+ const ws = ActiveSheet
748
+ const rng = ws.UsedRange
749
+
750
+ const formatConditions = rng.FormatConditions
751
+ // B列重复值高亮
752
+ const newCondition = formatConditions.Add(st.XlFormatConditionType.xlCellValue, st.XlFormatConditionOperator.xlEqual, '=B2')
753
+
754
+ }
pyxllib/text/jinjalib.py CHANGED
@@ -4,11 +4,6 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2024/05/26
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
8
-
9
- # 一个xpath解析库
10
- check_install_package('jinja2')
11
-
12
7
  import jinja2
13
8
  from jinja2 import Template, Environment
14
9
 
@@ -4,12 +4,12 @@
4
4
  # @Email : 877362867@qq.com
5
5
  # @Date : 2021/06/06 17:01
6
6
 
7
- from pyxllib.prog.pupil import check_install_package
7
+ # from pyxllib.prog.pupil import check_install_package
8
8
 
9
9
  # 这个需要C++14编译器 https://download.microsoft.com/download/5/f/7/5f7acaeb-8363-451f-9425-68a90f98b238/visualcppbuildtools_full.exe
10
10
  # 在需要的时候安装,防止只是想用pyxllib很简单的功能,但是在pip install阶段处理过于麻烦
11
11
  # MatchSimString计算编辑距离需要
12
- check_install_package('Levenshtein', 'python-Levenshtein')
12
+ # check_install_package('Levenshtein', 'python-Levenshtein')
13
13
 
14
14
  from collections import defaultdict
15
15
  from more_itertools import chunked
pyxllib/text/xmllib.py CHANGED
@@ -8,11 +8,6 @@
8
8
  xml等网页结构方面的处理
9
9
  """
10
10
 
11
- # from pyxllib.prog.pupil import check_install_package
12
-
13
- # 一个xpath解析库
14
- # check_install_package('xpath_parser', 'xpath-parser')
15
-
16
11
  import collections
17
12
  from collections import Counter, defaultdict
18
13
  import re
@@ -23,7 +18,6 @@ import pandas as pd
23
18
  import bs4
24
19
  from bs4 import BeautifulSoup
25
20
  from humanfriendly import format_size
26
- # from xpath_parser import XpathExpression
27
21
 
28
22
  from pyxllib.prog.newbie import round_int
29
23
  from pyxllib.prog.pupil import dprint, run_once, inject_members