pyxllib 0.3.104__tar.gz → 0.3.106__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.
- {pyxllib-0.3.104/pyxllib.egg-info → pyxllib-0.3.106}/PKG-INFO +1 -1
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/stat.py +4 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/pglib.py +32 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/sqlite.py +5 -0
- pyxllib-0.3.106/pyxllib/ext/drissionlib.py +103 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/utools.py +2 -2
- pyxllib-0.3.106/pyxllib/file/libreoffice.py +158 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/pupil.py +3 -3
- {pyxllib-0.3.104 → pyxllib-0.3.106/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/setup.py +1 -1
- pyxllib-0.3.104/pyxllib/ext/drissionlib.py +0 -67
- {pyxllib-0.3.104 → pyxllib-0.3.106}/LICENSE +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/MANIFEST.in +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/README.md +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib.egg-info/requires.txt +5 -5
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/requirements.txt +0 -0
- {pyxllib-0.3.104 → pyxllib-0.3.106}/setup.cfg +0 -0
@@ -18,6 +18,10 @@ from pyxllib.prog.pupil import dprint, typename
|
|
18
18
|
from pyxllib.file.specialist import XlPath
|
19
19
|
|
20
20
|
pd.options.display.unicode.east_asian_width = True # 优化中文输出对齐问题
|
21
|
+
try:
|
22
|
+
pd.set_option('future.no_silent_downcasting', True)
|
23
|
+
except Exception as e:
|
24
|
+
pass
|
21
25
|
|
22
26
|
|
23
27
|
def treetable(childreds, parents, arg3=None, nodename_colname=None):
|
@@ -34,6 +34,7 @@ import json
|
|
34
34
|
import json
|
35
35
|
import textwrap
|
36
36
|
import datetime
|
37
|
+
import re
|
37
38
|
|
38
39
|
from tqdm import tqdm
|
39
40
|
|
@@ -99,6 +100,37 @@ class Connection(psycopg.Connection, SqlBase):
|
|
99
100
|
self.execute(f"COMMENT ON COLUMN {table_name}.{col_name} IS $zyzf${comment}$zyzf$")
|
100
101
|
self.commit()
|
101
102
|
|
103
|
+
def reset_table_item_id(self, table_name, item_id_name=None, counter_name=None):
|
104
|
+
""" 重置表格的数据的id值,也重置计数器
|
105
|
+
|
106
|
+
:param item_id_name: 表格的自增id字段名,有一套我自己风格的自动推算算法
|
107
|
+
:param counter_name: 计数器字段名,如果有的话,也会重置
|
108
|
+
"""
|
109
|
+
# 1 重置数据的编号
|
110
|
+
if item_id_name is None:
|
111
|
+
m = re.match(r'(.+?)(_table)?$', table_name)
|
112
|
+
item_id_name = m.group(1) + '_id'
|
113
|
+
|
114
|
+
sql = f"""WITH cte AS (
|
115
|
+
SELECT {item_id_name}, ROW_NUMBER() OVER (ORDER BY {item_id_name}) AS new_{item_id_name}
|
116
|
+
FROM {table_name}
|
117
|
+
)
|
118
|
+
UPDATE {table_name}
|
119
|
+
SET {item_id_name} = cte.new_{item_id_name}
|
120
|
+
FROM cte
|
121
|
+
WHERE {table_name}.{item_id_name} = cte.{item_id_name}"""
|
122
|
+
self.execute(sql) # todo 这种sql写法好像偶尔有bug会出问题
|
123
|
+
self.commit()
|
124
|
+
|
125
|
+
# 2 重置计数器
|
126
|
+
if counter_name is None:
|
127
|
+
counter_name = f'{table_name}_{item_id_name}_seq'
|
128
|
+
|
129
|
+
# 找到目前最大的id值
|
130
|
+
max_id = self.exec2one(f'SELECT MAX({item_id_name}) FROM {table_name}')
|
131
|
+
self.execute(f'ALTER SEQUENCE {counter_name} RESTART WITH {max_id + 1}')
|
132
|
+
self.commit()
|
133
|
+
|
102
134
|
def __3_execute(self):
|
103
135
|
pass
|
104
136
|
|
@@ -12,7 +12,10 @@ from collections import defaultdict
|
|
12
12
|
|
13
13
|
import pandas as pd
|
14
14
|
|
15
|
+
# 旧版的pandas警告
|
15
16
|
warnings.filterwarnings('ignore', message="pandas only support SQLAlchemy connectable")
|
17
|
+
# 新版的pandas警告多了个's‘
|
18
|
+
warnings.filterwarnings('ignore', message="pandas only supports SQLAlchemy connectable")
|
16
19
|
|
17
20
|
|
18
21
|
class SqlBase:
|
@@ -191,6 +194,8 @@ class SqlBase:
|
|
191
194
|
cur.close()
|
192
195
|
self.commit()
|
193
196
|
|
197
|
+
self._commit_cache = defaultdict(list)
|
198
|
+
|
194
199
|
def update_row(self, table_name, cols, where, *, commit=False):
|
195
200
|
""" 【改】更新数据
|
196
201
|
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/04/12
|
6
|
+
|
7
|
+
from pyxllib.prog.pupil import check_install_package
|
8
|
+
|
9
|
+
check_install_package('DrissionPage')
|
10
|
+
|
11
|
+
import re
|
12
|
+
from urllib.parse import unquote
|
13
|
+
|
14
|
+
import DrissionPage
|
15
|
+
from DrissionPage import ChromiumPage
|
16
|
+
from DrissionPage._base.base import BasePage, BaseElement
|
17
|
+
|
18
|
+
from pyxllib.prog.pupil import inject_members
|
19
|
+
|
20
|
+
|
21
|
+
def get_latest_not_dev_tab(page=None):
|
22
|
+
""" 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
|
23
|
+
if page is None:
|
24
|
+
page = ChromiumPage()
|
25
|
+
tabs = page.get_tabs()
|
26
|
+
for tab in tabs:
|
27
|
+
if tab.url.startswith('devtools://'):
|
28
|
+
continue
|
29
|
+
return tab
|
30
|
+
|
31
|
+
|
32
|
+
def set_input_text(input_ele, text):
|
33
|
+
""" 因为input输入框可能原本就自带了内容,为了不重复输入,先清空再输入 """
|
34
|
+
input_ele.clear()
|
35
|
+
input_ele.input(text)
|
36
|
+
|
37
|
+
|
38
|
+
def search_download_file(file_name):
|
39
|
+
file_name = file_name.replace(':', '_')
|
40
|
+
files = ChromiumPage().get_download_files()
|
41
|
+
for file in files:
|
42
|
+
if file_name in file['file']: # 正常情况下的匹配
|
43
|
+
return file
|
44
|
+
if file_name in file['file'].replace('+', ' '): # 但有时候'+'好像有点特别
|
45
|
+
return file
|
46
|
+
|
47
|
+
|
48
|
+
class XlBasePage(BasePage):
|
49
|
+
def get2(self, url, show_errmsg=False, retry=None, interval=None):
|
50
|
+
"""
|
51
|
+
240418周四21:57,DrissionPage-4.0.4.21 官方自带page.get,有时候会有bug,不会实际刷新url,这里加个代码进行fix
|
52
|
+
"""
|
53
|
+
old_url = self.url
|
54
|
+
if old_url == url:
|
55
|
+
# page.refresh()
|
56
|
+
return
|
57
|
+
|
58
|
+
ele = self.active_ele
|
59
|
+
self.get(url, show_errmsg=show_errmsg, retry=retry, interval=interval)
|
60
|
+
try: # 如果新页面获取成功,理论上旧的ele会失效
|
61
|
+
ele
|
62
|
+
self.refresh() # 如果不报错,这里网站要强制更新
|
63
|
+
return self
|
64
|
+
except DrissionPage.errors.ElementLostError:
|
65
|
+
return self
|
66
|
+
|
67
|
+
def get_download_files(self):
|
68
|
+
""" 获取下载列表
|
69
|
+
|
70
|
+
:param search_name: 搜索文件名,输入该参数时,只会从上往下找到第一个匹配的文件
|
71
|
+
否则返回一个list结构,存储下载清单里的文件
|
72
|
+
:return:
|
73
|
+
|
74
|
+
todo 默认应该显示是不全的,有时间可以考虑往下滑动继续检索的功能
|
75
|
+
"""
|
76
|
+
files = []
|
77
|
+
page2 = self.new_tab('chrome://downloads/')
|
78
|
+
items = page2('tag:downloads-manager', timeout=1).sr('#mainContainer')('#downloadsList').eles(
|
79
|
+
'tag:downloads-item')
|
80
|
+
for item in items:
|
81
|
+
loc = unquote(item.sr('tag:img').attr('src').replace('+', ' '))
|
82
|
+
file = re.search(r'path=(.+?)(&scale=\d+x)?$', loc).group(1)
|
83
|
+
|
84
|
+
files.append({
|
85
|
+
'file': file,
|
86
|
+
'url': unquote(item.sr('#url').attr('href'))
|
87
|
+
})
|
88
|
+
|
89
|
+
page2.close()
|
90
|
+
|
91
|
+
return files
|
92
|
+
|
93
|
+
|
94
|
+
inject_members(XlBasePage, BasePage)
|
95
|
+
|
96
|
+
|
97
|
+
class XlBaseElement(BaseElement):
|
98
|
+
def input2(self, vals, clear=False, by_js=False):
|
99
|
+
self.clear()
|
100
|
+
self.input(vals)
|
101
|
+
|
102
|
+
|
103
|
+
inject_members(XlBaseElement, BaseElement)
|
@@ -130,8 +130,8 @@ class UtoolsBase:
|
|
130
130
|
except OSError: # 忽略错误的扩展名
|
131
131
|
f1 = XlPath.init('left', XlPath.tempdir())
|
132
132
|
f2 = XlPath.init('right', XlPath.tempdir())
|
133
|
-
f1.write_text(
|
134
|
-
f2.write_text(self.cmds['ClipText'])
|
133
|
+
f1.write_text(self.cmds['ClipText'])
|
134
|
+
f2.write_text(self.cmds['ClipText'] + '\n')
|
135
135
|
bcompare(f1, f2, wait=False)
|
136
136
|
|
137
137
|
|
@@ -0,0 +1,158 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/04/27
|
6
|
+
|
7
|
+
"""
|
8
|
+
libreoffice这个软件相关的功能
|
9
|
+
|
10
|
+
官网:https://www.libreoffice.org/download/download-libreoffice/
|
11
|
+
|
12
|
+
linux的安装:
|
13
|
+
sudo apt-get update
|
14
|
+
sudo apt-get install libreoffice -y
|
15
|
+
"""
|
16
|
+
|
17
|
+
import os
|
18
|
+
from pathlib import Path
|
19
|
+
import subprocess
|
20
|
+
import sys
|
21
|
+
import tempfile
|
22
|
+
from datetime import datetime
|
23
|
+
|
24
|
+
|
25
|
+
def check_libreoffice():
|
26
|
+
""" 检查LibreOffice是否安装 """
|
27
|
+
executor = get_libreoffice_executor()
|
28
|
+
try:
|
29
|
+
subprocess.run([executor, '--version'], check=True)
|
30
|
+
except FileNotFoundError:
|
31
|
+
return False
|
32
|
+
except subprocess.CalledProcessError:
|
33
|
+
return False
|
34
|
+
return True
|
35
|
+
|
36
|
+
|
37
|
+
def get_libreoffice_executor():
|
38
|
+
""" 获得可执行文件的名称 """
|
39
|
+
# 根据所在系统区分
|
40
|
+
if sys.platform == 'win32':
|
41
|
+
return 'soffice.exe'
|
42
|
+
else:
|
43
|
+
return 'libreoffice'
|
44
|
+
|
45
|
+
|
46
|
+
def infer_file_format(file_path):
|
47
|
+
""" 推断文件所属办公文档的'主类' """
|
48
|
+
ext = Path(file_path).suffix.lower()
|
49
|
+
if ext in ['.doc', '.docx']:
|
50
|
+
fmt = 'docx'
|
51
|
+
elif ext in ['.ppt', '.pptx']:
|
52
|
+
fmt = 'pptx'
|
53
|
+
elif ext in ['.xls', '.xlsx']:
|
54
|
+
fmt = 'xlsx'
|
55
|
+
else:
|
56
|
+
raise ValueError("不支持的文件格式")
|
57
|
+
return fmt
|
58
|
+
|
59
|
+
|
60
|
+
class UpgradeOfficeFile:
|
61
|
+
@classmethod
|
62
|
+
def to_dir(cls, file_path, out_dir=None, fmt=None):
|
63
|
+
""" 将doc文件转换为docx文件
|
64
|
+
|
65
|
+
:param file_path: 待升级的文件路径
|
66
|
+
:param out_dir: 输出文件目录
|
67
|
+
官方接口默认只能设置导出目录,不能设置导出文件名,文件名是跟原始文件一样的
|
68
|
+
:param fmt: 输出文件格式
|
69
|
+
docx, xlsx, pptx
|
70
|
+
"""
|
71
|
+
if isinstance(file_path, Path):
|
72
|
+
file_path = file_path.as_posix()
|
73
|
+
|
74
|
+
# 获取LibreOffice可执行文件的名称
|
75
|
+
executor = get_libreoffice_executor()
|
76
|
+
|
77
|
+
# 如果未指定输出路径,则默认在输入文件的同目录下生成同名的DOCX文件
|
78
|
+
if out_dir is None:
|
79
|
+
out_dir = os.path.dirname(file_path)
|
80
|
+
|
81
|
+
if fmt is None:
|
82
|
+
fmt = infer_file_format(file_path)
|
83
|
+
|
84
|
+
# 构建转换命令
|
85
|
+
command = [
|
86
|
+
executor,
|
87
|
+
'--headless', # 无界面模式
|
88
|
+
'--convert-to', fmt, # 转换为docx格式
|
89
|
+
'--outdir', out_dir, # 输出目录
|
90
|
+
file_path # 输入文件路径
|
91
|
+
]
|
92
|
+
|
93
|
+
subprocess.run(command, check=True)
|
94
|
+
|
95
|
+
# 返回转换后的文件路径
|
96
|
+
base_name = os.path.basename(file_path)
|
97
|
+
name, _ = os.path.splitext(base_name)
|
98
|
+
new_file_path = os.path.join(out_dir, f"{name}.{fmt}")
|
99
|
+
return new_file_path
|
100
|
+
|
101
|
+
@classmethod
|
102
|
+
def to_file(cls, in_file, out_file=None, fmt=None):
|
103
|
+
""" 可以指定转换出的文件名的版本
|
104
|
+
|
105
|
+
:param in_file: 待转换的文件路径
|
106
|
+
:param out_file: 输出文件路径
|
107
|
+
若未指定,默认与原文件同名,在原文件所在目录生成
|
108
|
+
:param fmt: 输出文件格式
|
109
|
+
docx, xlsx, pptx
|
110
|
+
若未指定,则根据in_file的后缀名自动判断
|
111
|
+
"""
|
112
|
+
# 将in_file转换为Path对象
|
113
|
+
in_file = Path(in_file)
|
114
|
+
|
115
|
+
# 如果fmt为None,则根据in_file推断
|
116
|
+
if fmt is None:
|
117
|
+
fmt = infer_file_format(in_file)
|
118
|
+
|
119
|
+
# 如果out_file为None,则默认在原文件目录生成同名的新格式文件
|
120
|
+
if out_file is None:
|
121
|
+
out_file = in_file.with_suffix(f'.{fmt}')
|
122
|
+
else:
|
123
|
+
out_file = Path(out_file)
|
124
|
+
|
125
|
+
# 确保out_file的父目录存在,不存在则创建
|
126
|
+
out_file.parent.mkdir(parents=True, exist_ok=True)
|
127
|
+
|
128
|
+
# 调用upgrade_office_file函数进行转换
|
129
|
+
temp_file = cls.to_dir(in_file, out_dir=out_file.parent, fmt=fmt)
|
130
|
+
|
131
|
+
# 将生成的临时文件重命名为out_file
|
132
|
+
os.rename(temp_file, out_file)
|
133
|
+
|
134
|
+
return out_file
|
135
|
+
|
136
|
+
@classmethod
|
137
|
+
def to_tempfile(cls, in_file, fmt=None, *, timestamp_stem=False, create_subdir=False):
|
138
|
+
""" 将文件转换为临时文件
|
139
|
+
|
140
|
+
:param timestamp_stem: 时间戳文件名
|
141
|
+
:param create_subdir: 是否在临时目录中创建新的子目录
|
142
|
+
"""
|
143
|
+
if fmt is None:
|
144
|
+
fmt = infer_file_format(in_file)
|
145
|
+
|
146
|
+
root = Path(tempfile.gettempdir())
|
147
|
+
if create_subdir:
|
148
|
+
root2 = root / datetime.now().strftime('%Y%m%d.%H%M%S.%f')
|
149
|
+
root2.mkdir(parents=True, exist_ok=True)
|
150
|
+
root = root2
|
151
|
+
|
152
|
+
if timestamp_stem:
|
153
|
+
stem = datetime.now().strftime('%Y%m%d.%H%M%S.%f')
|
154
|
+
out_file = cls.to_file(in_file, out_file=root / f"{stem}.{fmt}", fmt=fmt)
|
155
|
+
else:
|
156
|
+
out_file = cls.to_dir(in_file, out_dir=root, fmt=fmt)
|
157
|
+
|
158
|
+
return out_file
|
@@ -979,7 +979,7 @@ class MultiProcessLauncher:
|
|
979
979
|
def __init__(self):
|
980
980
|
self.workers = []
|
981
981
|
|
982
|
-
def
|
982
|
+
def add_process_cmd(self, cmd, name=None, **kwargs):
|
983
983
|
if name is None:
|
984
984
|
name = cmd.split()[0]
|
985
985
|
|
@@ -988,7 +988,7 @@ class MultiProcessLauncher:
|
|
988
988
|
worker.update(kwargs)
|
989
989
|
self.workers.append(worker)
|
990
990
|
|
991
|
-
def
|
991
|
+
def add_process_python_module(self, module, args='', name=None):
|
992
992
|
""" 添加并启动一个Python模块作为后台进程。
|
993
993
|
|
994
994
|
:param module: 要执行的Python模块名(python -m 后面的部分)
|
@@ -996,7 +996,7 @@ class MultiProcessLauncher:
|
|
996
996
|
:param name: 进程的名称,默认为模块名
|
997
997
|
"""
|
998
998
|
cmd = f'{sys.executable} -m {module} {args}'
|
999
|
-
self.
|
999
|
+
self.add_process_cmd(cmd, name=name)
|
1000
1000
|
|
1001
1001
|
def stop_all(self):
|
1002
1002
|
""" 停止所有后台进程 """
|
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
|
|
30
30
|
|
31
31
|
setup(
|
32
32
|
name='pyxllib', # pip 安装时用的名字
|
33
|
-
version='0.3.
|
33
|
+
version='0.3.106', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
34
34
|
author='code4101',
|
35
35
|
author_email='877362867@qq.com',
|
36
36
|
url='https://github.com/XLPRUtils/pyxllib',
|
@@ -1,67 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
# @Author : 陈坤泽
|
4
|
-
# @Email : 877362867@qq.com
|
5
|
-
# @Date : 2024/04/12
|
6
|
-
|
7
|
-
from pyxllib.prog.pupil import check_install_package
|
8
|
-
|
9
|
-
check_install_package('DrissionPage')
|
10
|
-
|
11
|
-
import re
|
12
|
-
from urllib.parse import unquote
|
13
|
-
|
14
|
-
from DrissionPage import ChromiumPage
|
15
|
-
|
16
|
-
|
17
|
-
def get_latest_not_dev_tab(page=None):
|
18
|
-
""" 开发工具本身也会算一个tab,这个函数返回最新的一个不是开发工具的tab """
|
19
|
-
if page is None:
|
20
|
-
page = ChromiumPage()
|
21
|
-
tabs = page.get_tabs()
|
22
|
-
for tab in tabs:
|
23
|
-
if tab.url.startswith('devtools://'):
|
24
|
-
continue
|
25
|
-
return tab
|
26
|
-
|
27
|
-
|
28
|
-
def set_input_text(input_ele, text):
|
29
|
-
""" 因为input输入框可能原本就自带了内容,为了不重复输入,先清空再输入 """
|
30
|
-
input_ele.clear()
|
31
|
-
input_ele.input(text)
|
32
|
-
|
33
|
-
|
34
|
-
def get_download_files(page=None):
|
35
|
-
""" 获取下载列表
|
36
|
-
|
37
|
-
:param search_name: 搜索文件名,输入该参数时,只会从上往下找到第一个匹配的文件
|
38
|
-
否则返回一个list结构,存储下载清单里的文件
|
39
|
-
:return:
|
40
|
-
|
41
|
-
todo 默认应该显示是不全的,有时间可以考虑往下滑动继续检索的功能
|
42
|
-
"""
|
43
|
-
if page is None:
|
44
|
-
page = ChromiumPage()
|
45
|
-
|
46
|
-
files = []
|
47
|
-
page2 = page.new_tab('chrome://downloads/')
|
48
|
-
items = page2('tag:downloads-manager', timeout=1).sr('#mainContainer')('#downloadsList').eles('tag:downloads-item')
|
49
|
-
for item in items:
|
50
|
-
loc = unquote(item.sr('tag:img').attr('src'))
|
51
|
-
file = re.search(r'path=(.+?)(&scale=\d+x)?$', loc).group(1)
|
52
|
-
|
53
|
-
files.append({
|
54
|
-
'file': file,
|
55
|
-
'url': unquote(item.sr('#url').attr('href'))
|
56
|
-
})
|
57
|
-
|
58
|
-
page2.close()
|
59
|
-
|
60
|
-
return files
|
61
|
-
|
62
|
-
|
63
|
-
def search_download_file(file_name):
|
64
|
-
files = get_download_files()
|
65
|
-
for file in files:
|
66
|
-
if file_name in file['file']:
|
67
|
-
return file
|
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
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|