pyxllib 0.3.90__tar.gz → 0.3.91__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.90/pyxllib.egg-info → pyxllib-0.3.91}/PKG-INFO +1 -1
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/xlsxlib.py +88 -47
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/newbie.py +22 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/pupil.py +4 -1
- {pyxllib-0.3.90 → pyxllib-0.3.91/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.90 → pyxllib-0.3.91}/setup.py +1 -1
- {pyxllib-0.3.90 → pyxllib-0.3.91}/LICENSE +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/MANIFEST.in +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/README.md +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib.egg-info/requires.txt +4 -4
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/requirements.txt +0 -0
- {pyxllib-0.3.90 → pyxllib-0.3.91}/setup.cfg +0 -0
@@ -42,7 +42,9 @@ try:
|
|
42
42
|
except ModuleNotFoundError:
|
43
43
|
pass
|
44
44
|
|
45
|
-
from pyxllib.prog.
|
45
|
+
from pyxllib.prog.newbie import human_readable_number
|
46
|
+
from pyxllib.prog.pupil import (inject_members, dprint, xlmd5, shuffle_dict_keys, Timeout,
|
47
|
+
safe_div, format_exception, DictTool)
|
46
48
|
from pyxllib.prog.specialist import browser, TicToc
|
47
49
|
from pyxllib.algo.specialist import product
|
48
50
|
from pyxllib.text.pupil import calc_chinese_ratio
|
@@ -249,8 +251,10 @@ def xl_render_value(x, xl_fmt):
|
|
249
251
|
y = x.strftime(xlfmt2pyfmt_time(xl_fmt))
|
250
252
|
elif isinstance(x, datetime.timedelta):
|
251
253
|
y = str(x)
|
252
|
-
|
254
|
+
elif isinstance(x, (str, int, float, bool)): # 其他可以json化的数据类型
|
253
255
|
y = x
|
256
|
+
else: # ArrayFormula、DataTableFormula等无法json化的数据,提前转str
|
257
|
+
y = str(x)
|
254
258
|
return y
|
255
259
|
|
256
260
|
|
@@ -2107,8 +2111,12 @@ def extract_cells_content(ws, usedrange=None):
|
|
2107
2111
|
if val is None:
|
2108
2112
|
return ''
|
2109
2113
|
else:
|
2110
|
-
|
2111
|
-
|
2114
|
+
return cell.get_render_value()
|
2115
|
+
# 如果感觉这步很慢,可以换一种更简洁的形式;但是发现下面这种对时间的格式显示还是太不智能。
|
2116
|
+
# if not isinstance(val, (str, int, float, bool)):
|
2117
|
+
# return val
|
2118
|
+
# else:
|
2119
|
+
# return str(val)
|
2112
2120
|
|
2113
2121
|
for i in range(usedrange_bound['top'], usedrange_bound['bottom'] + 1):
|
2114
2122
|
for j in range(usedrange_bound['left'], usedrange_bound['right'] + 1):
|
@@ -2334,25 +2342,27 @@ def extract_workbook_summary(file_path, mode=0,
|
|
2334
2342
|
|
2335
2343
|
|
2336
2344
|
def extract_workbook_summary2(file_path, *,
|
2337
|
-
timeout_seconds=None,
|
2338
|
-
ignore_errors=False,
|
2339
2345
|
keep_links=False,
|
2340
2346
|
keep_vba=False,
|
2341
|
-
mode=0
|
2347
|
+
mode=0,
|
2348
|
+
return_mode=0,
|
2349
|
+
**kwargs):
|
2342
2350
|
"""
|
2343
2351
|
:param keep_links: 是否保留外部表格链接数据。如果保留,打开好像会有点问题。
|
2344
2352
|
:param mode:
|
2345
2353
|
0,最原始的summary3摘要
|
2346
2354
|
1,添加当前工作表、单元格位置的信息
|
2355
|
+
:param kwargs: 捕捉其他参数,主要是向下兼容,其实现在并没有用
|
2347
2356
|
|
2348
2357
|
注意这里没有提供read_only可选参数,是因为read_only=True模式在我这里是运行不了的。
|
2349
2358
|
"""
|
2350
|
-
# 1 读取文件wb
|
2351
|
-
file_path = Path(file_path)
|
2352
|
-
suffix = file_path.suffix.lower()
|
2353
2359
|
|
2354
|
-
|
2355
|
-
|
2360
|
+
# 1 读取文件wb
|
2361
|
+
def read_file_by_type():
|
2362
|
+
nonlocal load_time
|
2363
|
+
nonlocal load_time
|
2364
|
+
suffix = file_path.suffix.lower()
|
2365
|
+
start_time = time.time()
|
2356
2366
|
if suffix in ('.xlsx', '.xlsm'):
|
2357
2367
|
wb = openpyxl.load_workbook(file_path,
|
2358
2368
|
keep_links=keep_links,
|
@@ -2362,38 +2372,32 @@ def extract_workbook_summary2(file_path, *,
|
|
2362
2372
|
elif suffix == '.csv':
|
2363
2373
|
wb = convert_csv_to_xlsx(file_path)
|
2364
2374
|
else:
|
2365
|
-
|
2366
|
-
|
2367
|
-
|
2368
|
-
def process_file(file_path, suffix, timeout_seconds=None, keep_links=False, ignore_errors=False):
|
2369
|
-
try:
|
2370
|
-
if timeout_seconds is None:
|
2371
|
-
wb = read_file_by_type(file_path, suffix, keep_links)
|
2372
|
-
else:
|
2373
|
-
with Timeout(timeout_seconds): # 使用之前定义的timeout上下文管理器
|
2374
|
-
wb = read_file_by_type(file_path, suffix, keep_links)
|
2375
|
-
except Exception as e:
|
2376
|
-
if ignore_errors:
|
2377
|
-
return {}
|
2378
|
-
else:
|
2379
|
-
raise e
|
2375
|
+
return None
|
2376
|
+
load_time = time.time() - start_time
|
2380
2377
|
return wb
|
2381
2378
|
|
2382
|
-
|
2379
|
+
load_time = -1
|
2380
|
+
file_path = Path(file_path)
|
2381
|
+
res = {}
|
2382
|
+
res['fileName'] = file_path.name
|
2383
|
+
wb = read_file_by_type()
|
2384
|
+
if wb is None: # 不支持的文件类型,不报错,只是返回最基本的文件名信息
|
2385
|
+
return res
|
2383
2386
|
|
2384
2387
|
# 2 提取摘要
|
2385
|
-
|
2386
|
-
res
|
2387
|
-
|
2388
|
+
summary2 = wb.extract_summary2()
|
2389
|
+
DictTool.ior(res, summary2)
|
2390
|
+
if mode == 1:
|
2391
|
+
ws = wb.active
|
2392
|
+
res['ActiveSheet'] = ws.title
|
2393
|
+
res['Selection'] = ws.selected_cell
|
2388
2394
|
|
2389
|
-
|
2390
|
-
pass
|
2391
|
-
elif mode == 1:
|
2392
|
-
res['ActiveSheet'] = wb.active.title
|
2393
|
-
# todo py好像没办法提取Selection。但jsa、vba应该要尽力取出这些相关的特征,尤其在操作等场景很有用
|
2394
|
-
# res['SelectionAddress'] = ...
|
2395
|
+
# res = convert_to_json_compatible(res)
|
2395
2396
|
|
2396
|
-
|
2397
|
+
if return_mode == 1:
|
2398
|
+
return res, load_time
|
2399
|
+
else:
|
2400
|
+
return res
|
2397
2401
|
|
2398
2402
|
|
2399
2403
|
def update_raw_summary2(data):
|
@@ -2838,10 +2842,10 @@ class WorkbookSummary3:
|
|
2838
2842
|
y = {
|
2839
2843
|
'fileName': x['fileName'],
|
2840
2844
|
'sheetNames': x['sheetNames'],
|
2841
|
-
'ActiveSheet': x['ActiveSheet'], # 当期激活的工作表
|
2842
|
-
# 'SelectionAddress': '',
|
2843
2845
|
'sheets': x['sheets'],
|
2844
2846
|
'mode': 'Complete information',
|
2847
|
+
'ActiveSheet': x['ActiveSheet'], # 当期激活的工作表
|
2848
|
+
'Selection': x['Selection'],
|
2845
2849
|
}
|
2846
2850
|
|
2847
2851
|
# 处理前确保下cells字段存在,避免后续很多处理过程要特判
|
@@ -2868,10 +2872,47 @@ def extract_workbook_summary3(file_path, summary_limit_len=4000, **kwargs):
|
|
2868
2872
|
return data
|
2869
2873
|
|
2870
2874
|
|
2871
|
-
def extract_workbook_summary3b(file_path,
|
2872
|
-
|
2873
|
-
|
2874
|
-
|
2875
|
-
|
2876
|
-
|
2877
|
-
|
2875
|
+
def extract_workbook_summary3b(file_path,
|
2876
|
+
summary_limit_len=4000,
|
2877
|
+
timeout_seconds=60,
|
2878
|
+
return_mode=0,
|
2879
|
+
**kwargs):
|
2880
|
+
"""
|
2881
|
+
|
2882
|
+
:param summary_limit_len: 摘要长度限制
|
2883
|
+
:param timeout_seconds: 超时限制
|
2884
|
+
:param return_mode: 返回模式,0表示只返回摘要,1表示返回摘要和耗时
|
2885
|
+
:param kwargs: 其他是summary2读取文件的时候的参数,其实都不太关键,一般不用特地设置
|
2886
|
+
"""
|
2887
|
+
res = {}
|
2888
|
+
res['fileName'] = file_path.name
|
2889
|
+
load_time = summary2_time = summary3_time = -1
|
2890
|
+
|
2891
|
+
# with Timeout(timeout_seconds):
|
2892
|
+
# start_time = time.time()
|
2893
|
+
# res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
|
2894
|
+
# summary2_time = time.time() - start_time - load_time
|
2895
|
+
# start_time = time.time()
|
2896
|
+
# res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
|
2897
|
+
# summary3_time = time.time() - start_time
|
2898
|
+
|
2899
|
+
try:
|
2900
|
+
with Timeout(timeout_seconds):
|
2901
|
+
start_time = time.time()
|
2902
|
+
res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
|
2903
|
+
# res = convert_to_json_compatible(res)
|
2904
|
+
summary2_time = time.time() - start_time - load_time
|
2905
|
+
start_time = time.time()
|
2906
|
+
res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
|
2907
|
+
summary3_time = time.time() - start_time
|
2908
|
+
except TimeoutError:
|
2909
|
+
res['error'] = f'超时,未完成摘要提取:{timeout_seconds}秒'
|
2910
|
+
except Exception as e:
|
2911
|
+
# raise e
|
2912
|
+
res['error'] = f'提取摘要时发生错误:{format_exception(e, 2)}'
|
2913
|
+
|
2914
|
+
if return_mode == 1:
|
2915
|
+
return res, {'load_time': human_readable_number(load_time),
|
2916
|
+
'summary2_time': human_readable_number(summary2_time),
|
2917
|
+
'summary3_time': human_readable_number(summary3_time)}
|
2918
|
+
return res
|
@@ -420,3 +420,25 @@ def get_global_var(name, default_value=None):
|
|
420
420
|
if name not in g:
|
421
421
|
g[name] = default_value
|
422
422
|
return g[name]
|
423
|
+
|
424
|
+
|
425
|
+
def convert_to_json_compatible(d, custom_converter=None):
|
426
|
+
""" 递归地将字典等类型转换为JSON兼容格式。对于非标准JSON类型,使用自定义转换器或默认转换为字符串。
|
427
|
+
|
428
|
+
:param d: 要转换的字典或列表。
|
429
|
+
:param custom_converter: 自定义转换函数,用于处理非标准JSON类型的值。
|
430
|
+
:return: 转换后的字典或列表。
|
431
|
+
|
432
|
+
todo 这个函数想法是好的,但总感觉精确性中,总容易有些问题的,需要更多的考察测试
|
433
|
+
"""
|
434
|
+
if custom_converter is None:
|
435
|
+
custom_converter = str
|
436
|
+
|
437
|
+
if isinstance(d, dict): # defaultdict呢?
|
438
|
+
return {k: convert_to_json_compatible(v, custom_converter) for k, v in d.items()}
|
439
|
+
elif isinstance(d, list):
|
440
|
+
return [convert_to_json_compatible(v, custom_converter) for v in d]
|
441
|
+
elif isinstance(d, (int, float, str, bool)) or d is None:
|
442
|
+
return d
|
443
|
+
else:
|
444
|
+
return custom_converter(d)
|
@@ -508,7 +508,7 @@ class Timeout:
|
|
508
508
|
""" 对函数等待执行的功能,限制运行时间
|
509
509
|
|
510
510
|
【实现思路】
|
511
|
-
1、最简单的方式是用signal.SIGALRM
|
511
|
+
1、最简单的方式是用signal.SIGALRM实现(包括三方库timeout-decorator也有这个局限)
|
512
512
|
https://stackoverflow.com/questions/2281850/timeout-function-if-it-takes-too-long-to-finish
|
513
513
|
但是这个不支持windows系统~~
|
514
514
|
2、那windows和linux通用的做法,就是把原执行函数变成一个子线程来运行
|
@@ -519,6 +519,7 @@ class Timeout:
|
|
519
519
|
是用一个Timer计时器子线程计时,当timeout超时,使用信号机制给主线程抛出一个异常
|
520
520
|
① 注意,不能子线程直接抛出异常,这样影响不了主线程
|
521
521
|
② 也不能直接抛出错误signal,这样会强制直接中断程序。应该抛出TimeoutError,让后续程序进行超时逻辑的处理
|
522
|
+
③ 这里是让子线程抛出信号,主线程收到信号后,再抛出TimeoutError
|
522
523
|
|
523
524
|
注意:这个函数似乎不支持多线程
|
524
525
|
"""
|
@@ -560,10 +561,12 @@ class Timeout:
|
|
560
561
|
def send_signal():
|
561
562
|
signal.raise_signal(signal.SIGABRT)
|
562
563
|
|
564
|
+
# 挂起一个警告器,如果"没人"管它,self.seconds就会抛出错误
|
563
565
|
self.alarm = threading.Timer(self.seconds, send_signal)
|
564
566
|
self.alarm.start()
|
565
567
|
|
566
568
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
569
|
+
# with已经运行完了,马上关闭警告器
|
567
570
|
self.alarm.cancel()
|
568
571
|
|
569
572
|
|
@@ -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.91', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
34
34
|
author='code4101',
|
35
35
|
author_email='877362867@qq.com',
|
36
36
|
url='https://github.com/XLPRUtils/pyxllib',
|
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
|
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
|
@@ -21,14 +21,14 @@ Jinja2
|
|
21
21
|
pandas>=0.23.4
|
22
22
|
|
23
23
|
[xlai]
|
24
|
+
opencv-python
|
24
25
|
pillow
|
26
|
+
visdom
|
25
27
|
xlcocotools
|
26
|
-
pynvml
|
27
28
|
opsdroid-get-image-size
|
28
|
-
|
29
|
-
visdom
|
29
|
+
pynvml
|
30
30
|
|
31
31
|
[xlcv]
|
32
|
-
opencv-python
|
33
32
|
opsdroid-get-image-size
|
33
|
+
opencv-python
|
34
34
|
pillow
|
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
|