pyxllib 0.3.105__tar.gz → 0.3.107__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.105/pyxllib.egg-info → pyxllib-0.3.107}/PKG-INFO +1 -1
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/stat.py +4 -0
- pyxllib-0.3.107/pyxllib/file/libreoffice.py +164 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/xlsxlib.py +33 -22
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/pupil.py +3 -3
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/tictoc.py +1 -1
- {pyxllib-0.3.105 → pyxllib-0.3.107/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/setup.py +1 -1
- {pyxllib-0.3.105 → pyxllib-0.3.107}/LICENSE +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/MANIFEST.in +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/README.md +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib.egg-info/requires.txt +4 -4
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/requirements.txt +0 -0
- {pyxllib-0.3.105 → pyxllib-0.3.107}/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):
|
@@ -0,0 +1,164 @@
|
|
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, timeout=10):
|
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', str(out_dir), # 输出目录
|
90
|
+
file_path # 输入文件路径
|
91
|
+
]
|
92
|
+
|
93
|
+
subprocess.run(command, timeout=timeout, 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
|
+
|
100
|
+
# todo 以目标文件是否存在判断转换是否成功也是有一定bug的,可能目标文件本来就存在
|
101
|
+
# 但如果严谨判断,就要分析subprocess.run的输出结果了,那个太麻烦,先用简便方法处理
|
102
|
+
if not Path(new_file_path).exists():
|
103
|
+
raise ValueError(f"升级文档失败")
|
104
|
+
|
105
|
+
return new_file_path
|
106
|
+
|
107
|
+
@classmethod
|
108
|
+
def to_file(cls, in_file, out_file=None, fmt=None, timeout=10):
|
109
|
+
""" 可以指定转换出的文件名的版本
|
110
|
+
|
111
|
+
:param in_file: 待转换的文件路径
|
112
|
+
:param out_file: 输出文件路径
|
113
|
+
若未指定,默认与原文件同名,在原文件所在目录生成
|
114
|
+
:param fmt: 输出文件格式
|
115
|
+
docx, xlsx, pptx
|
116
|
+
若未指定,则根据in_file的后缀名自动判断
|
117
|
+
"""
|
118
|
+
# 将in_file转换为Path对象
|
119
|
+
in_file = Path(in_file)
|
120
|
+
|
121
|
+
# 如果fmt为None,则根据in_file推断
|
122
|
+
if fmt is None:
|
123
|
+
fmt = infer_file_format(in_file)
|
124
|
+
|
125
|
+
# 如果out_file为None,则默认在原文件目录生成同名的新格式文件
|
126
|
+
if out_file is None:
|
127
|
+
out_file = in_file.with_suffix(f'.{fmt}')
|
128
|
+
else:
|
129
|
+
out_file = Path(out_file)
|
130
|
+
|
131
|
+
# 确保out_file的父目录存在,不存在则创建
|
132
|
+
out_file.parent.mkdir(parents=True, exist_ok=True)
|
133
|
+
|
134
|
+
# 调用upgrade_office_file函数进行转换
|
135
|
+
temp_file = cls.to_dir(in_file, out_dir=out_file.parent, fmt=fmt, timeout=timeout)
|
136
|
+
|
137
|
+
# 将生成的临时文件重命名为out_file
|
138
|
+
os.rename(temp_file, out_file)
|
139
|
+
|
140
|
+
return out_file
|
141
|
+
|
142
|
+
@classmethod
|
143
|
+
def to_tempfile(cls, in_file, fmt=None, *, timestamp_stem=False, create_subdir=False, timeout=10):
|
144
|
+
""" 将文件转换为临时文件
|
145
|
+
|
146
|
+
:param timestamp_stem: 时间戳文件名
|
147
|
+
:param create_subdir: 是否在临时目录中创建新的子目录
|
148
|
+
"""
|
149
|
+
if fmt is None:
|
150
|
+
fmt = infer_file_format(in_file)
|
151
|
+
|
152
|
+
root = Path(tempfile.gettempdir())
|
153
|
+
if create_subdir:
|
154
|
+
root2 = root / datetime.now().strftime('%Y%m%d.%H%M%S.%f')
|
155
|
+
root2.mkdir(parents=True, exist_ok=True)
|
156
|
+
root = root2
|
157
|
+
|
158
|
+
if timestamp_stem:
|
159
|
+
stem = datetime.now().strftime('%Y%m%d.%H%M%S.%f')
|
160
|
+
out_file = cls.to_file(in_file, out_file=root / f"{stem}.{fmt}", fmt=fmt, timeout=timeout)
|
161
|
+
else:
|
162
|
+
out_file = cls.to_dir(in_file, out_dir=root, fmt=fmt, timeout=timeout)
|
163
|
+
|
164
|
+
return out_file
|
@@ -2650,30 +2650,39 @@ class WorkbookSummary3:
|
|
2650
2650
|
for addr, _ in row:
|
2651
2651
|
new_cells[addr] = cells[addr]
|
2652
2652
|
|
2653
|
-
|
2654
|
-
for rows in rows_groups:
|
2653
|
+
total_new_cells = []
|
2654
|
+
for rows in reversed(rows_groups):
|
2655
|
+
new_cells = {}
|
2655
2656
|
if len(rows) < 10:
|
2656
2657
|
extract_cells_from_rows(rows)
|
2657
2658
|
else: # 压缩中间的数据
|
2658
2659
|
# 如果评估到最终摘要可能太小,要收敛下删除的范围
|
2659
2660
|
n, m = len(rows), len(rows[0])
|
2660
2661
|
target_n = int(target_reduce_cells_num / m + 0.5) # 本来应该删除多少行才行
|
2661
|
-
|
2662
|
-
|
2663
|
-
|
2664
|
-
|
2665
|
-
|
2666
|
-
|
2667
|
-
|
2668
|
-
|
2669
|
-
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
2662
|
+
if target_n <= 0: # 如果删除的行数太少,那么就不压缩了
|
2663
|
+
extract_cells_from_rows(rows)
|
2664
|
+
else:
|
2665
|
+
cur_n = n - 4 if target_n > n - 4 else target_n # 实际删除多少行
|
2666
|
+
left_n = n - cur_n # 剩余多少行
|
2667
|
+
b = left_n // 2
|
2668
|
+
a = left_n - b
|
2669
|
+
|
2670
|
+
extract_cells_from_rows(rows[:a])
|
2671
|
+
addr = combine_addresses(rows[a][0][0], rows[-b - 1][-1][0])
|
2672
|
+
# new_cells[addr] = '这块区域的内容跟前面几行、后面几行的内容结构是一致的,省略显示'
|
2673
|
+
new_cells[addr] = '...'
|
2674
|
+
extract_cells_from_rows(rows[-b:])
|
2675
|
+
|
2676
|
+
target_reduce_cells_num -= cur_n * m
|
2677
|
+
# 240429周一21:57,这两行不能开,否则会过渡精简。如果压缩够了,那么后面的单元格需要全量补上。
|
2678
|
+
# if target_reduce_cells_num <= 0: # 满足以后不是直接break,而是要把后续的内容都保留
|
2679
|
+
# break
|
2680
|
+
total_new_cells.append(new_cells)
|
2681
|
+
|
2682
|
+
new_cells2 = {}
|
2683
|
+
for rows in reversed(total_new_cells):
|
2684
|
+
new_cells2.update(rows)
|
2685
|
+
sheet['cells'] = new_cells2
|
2677
2686
|
|
2678
2687
|
@classmethod
|
2679
2688
|
def reduce4_truncate_cells(cls, y, summary_limit_len, *, cur_summary_len=None):
|
@@ -2805,6 +2814,7 @@ class WorkbookSummary3:
|
|
2805
2814
|
if cur_summary_len is None:
|
2806
2815
|
cur_summary_len = cls.count_length(y)
|
2807
2816
|
|
2817
|
+
cur_summary_len0 = cur_summary_len
|
2808
2818
|
active_sheet = y['ActiveSheet']
|
2809
2819
|
|
2810
2820
|
# 1 预计要删除单元格数
|
@@ -2836,7 +2846,8 @@ class WorkbookSummary3:
|
|
2836
2846
|
return cls.count_length(y)
|
2837
2847
|
|
2838
2848
|
# 4 否则每张表按照比例删单元格,只保留前面部分的单元格
|
2839
|
-
|
2849
|
+
# todo 这里应该有更好的筛选机制,后续可以思考思考
|
2850
|
+
left_rate = min((summary_limit_len + cur_summary_len) / 2 * cur_summary_len, 0.9) # 首轮减小一点调整幅度
|
2840
2851
|
while True:
|
2841
2852
|
for i, st in enumerate(y['sheets']):
|
2842
2853
|
if i == active_sheet_index:
|
@@ -2848,10 +2859,10 @@ class WorkbookSummary3:
|
|
2848
2859
|
cur_summary_len = cls.count_length(y)
|
2849
2860
|
if cur_summary_len <= summary_limit_len:
|
2850
2861
|
return cur_summary_len
|
2851
|
-
if left_rate * total_cells_num < 1:
|
2862
|
+
if left_rate * total_cells_num < 1: # 都没有单元格,别删了
|
2852
2863
|
break
|
2853
|
-
else:
|
2854
|
-
left_rate *= 0.
|
2864
|
+
else: # 更新保留比率,再试
|
2865
|
+
left_rate *= min(summary_limit_len / cur_summary_len, 0.9)
|
2855
2866
|
|
2856
2867
|
return cur_summary_len
|
2857
2868
|
|
@@ -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.107', # 当前版本,每次更新上传到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
|
File without changes
|
File without changes
|
@@ -22,13 +22,13 @@ pandas>=0.23.4
|
|
22
22
|
|
23
23
|
[xlai]
|
24
24
|
visdom
|
25
|
-
pynvml
|
26
|
-
pillow
|
27
25
|
opsdroid-get-image-size
|
28
|
-
opencv-python
|
29
26
|
xlcocotools
|
27
|
+
opencv-python
|
28
|
+
pynvml
|
29
|
+
pillow
|
30
30
|
|
31
31
|
[xlcv]
|
32
32
|
opsdroid-get-image-size
|
33
|
-
opencv-python
|
34
33
|
pillow
|
34
|
+
opencv-python
|
File without changes
|
File without changes
|
File without changes
|