re-common 10.0.41__tar.gz → 10.0.42__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.
Files changed (260) hide show
  1. {re_common-10.0.41/re_common.egg-info → re_common-10.0.42}/PKG-INFO +1 -1
  2. re_common-10.0.42/re_common/v2/baselibrary/s3object/baseaioboto3.py +48 -0
  3. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/data_processer/base.py +2 -2
  4. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/data_processer/data_reader.py +9 -6
  5. re_common-10.0.42/re_common/v2/baselibrary/tools/dir_file_tools.py +27 -0
  6. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/list_tools.py +18 -1
  7. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/api_net_utils.py +49 -21
  8. re_common-10.0.42/re_common/v2/baselibrary/utils/pinyin_utils.py +178 -0
  9. {re_common-10.0.41 → re_common-10.0.42/re_common.egg-info}/PKG-INFO +1 -1
  10. {re_common-10.0.41 → re_common-10.0.42}/re_common.egg-info/SOURCES.txt +3 -0
  11. {re_common-10.0.41 → re_common-10.0.42}/setup.py +1 -1
  12. {re_common-10.0.41 → re_common-10.0.42}/LICENSE +0 -0
  13. {re_common-10.0.41 → re_common-10.0.42}/README.md +0 -0
  14. {re_common-10.0.41 → re_common-10.0.42}/pyproject.toml +0 -0
  15. {re_common-10.0.41 → re_common-10.0.42}/re_common/__init__.py +0 -0
  16. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/__init__.py +0 -0
  17. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/baseabs/__init__.py +0 -0
  18. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/baseabs/baseabs.py +0 -0
  19. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/__init__.py +0 -0
  20. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/mbuilder.py +0 -0
  21. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/moudle.py +0 -0
  22. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/msqlite3.py +0 -0
  23. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/mysql.py +0 -0
  24. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/database/sql_factory.py +0 -0
  25. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/mthread/MThreadingRun.py +0 -0
  26. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -0
  27. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/mthread/__init__.py +0 -0
  28. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/mthread/mythreading.py +0 -0
  29. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/pakge_other/__init__.py +0 -0
  30. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/pakge_other/socks.py +0 -0
  31. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/readconfig/__init__.py +0 -0
  32. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/readconfig/config_factory.py +0 -0
  33. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/readconfig/ini_config.py +0 -0
  34. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/readconfig/toml_config.py +0 -0
  35. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/temporary/__init__.py +0 -0
  36. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/temporary/envdata.py +0 -0
  37. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/__init__.py +0 -0
  38. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/all_requests/__init__.py +0 -0
  39. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -0
  40. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -0
  41. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/all_requests/mrequest.py +0 -0
  42. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/all_requests/requests_request.py +0 -0
  43. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
  44. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -0
  45. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/contrast_db3.py +0 -0
  46. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/copy_file.py +0 -0
  47. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/db3_2_sizedb3.py +0 -0
  48. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/foreachgz.py +0 -0
  49. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/get_attr.py +0 -0
  50. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/image_to_pdf.py +0 -0
  51. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/java_code_deal.py +0 -0
  52. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/javacode.py +0 -0
  53. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mdb_db3.py +0 -0
  54. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/merge_file.py +0 -0
  55. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/merge_gz_file.py +0 -0
  56. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
  57. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -0
  58. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -0
  59. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -0
  60. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mongo_tools.py +0 -0
  61. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_file.py +0 -0
  62. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
  63. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -0
  64. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -0
  65. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -0
  66. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/move_mongo/use_mv.py +0 -0
  67. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mpandas/__init__.py +0 -0
  68. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -0
  69. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -0
  70. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/myparsel.py +0 -0
  71. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/rename_dir_file.py +0 -0
  72. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/sequoiadb_utils.py +0 -0
  73. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/split_line_to_many.py +0 -0
  74. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/stringtodicts.py +0 -0
  75. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/tools/workwechant_bot.py +0 -0
  76. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/__init__.py +0 -0
  77. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseaiohttp.py +0 -0
  78. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseaiomysql.py +0 -0
  79. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseallstep.py +0 -0
  80. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseavro.py +0 -0
  81. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseboto3.py +0 -0
  82. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basecsv.py +0 -0
  83. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basedict.py +0 -0
  84. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basedir.py +0 -0
  85. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseencode.py +0 -0
  86. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseencoding.py +0 -0
  87. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseesdsl.py +0 -0
  88. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseexcel.py +0 -0
  89. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseexcept.py +0 -0
  90. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basefile.py +0 -0
  91. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseftp.py +0 -0
  92. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basegzip.py +0 -0
  93. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basehdfs.py +0 -0
  94. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basehttpx.py +0 -0
  95. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseip.py +0 -0
  96. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basejson.py +0 -0
  97. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baselist.py +0 -0
  98. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basemotor.py +0 -0
  99. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basemssql.py +0 -0
  100. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseodbc.py +0 -0
  101. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basepandas.py +0 -0
  102. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basepeewee.py +0 -0
  103. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basepika.py +0 -0
  104. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basepydash.py +0 -0
  105. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basepymongo.py +0 -0
  106. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basequeue.py +0 -0
  107. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baserar.py +0 -0
  108. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baserequest.py +0 -0
  109. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseset.py +0 -0
  110. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basesmb.py +0 -0
  111. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basestring.py +0 -0
  112. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basetime.py +0 -0
  113. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basetuple.py +0 -0
  114. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/baseurl.py +0 -0
  115. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/basezip.py +0 -0
  116. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/__init__.py +0 -0
  117. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/bottomutils.py +0 -0
  118. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/mdeprecated.py +0 -0
  119. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/mlamada.py +0 -0
  120. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/msginfo.py +0 -0
  121. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/core/requests_core.py +0 -0
  122. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/fateadm.py +0 -0
  123. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/importfun.py +0 -0
  124. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/mfaker.py +0 -0
  125. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/my_abc/__init__.py +0 -0
  126. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/my_abc/better_abc.py +0 -0
  127. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/mylogger.py +0 -0
  128. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/myredisclient.py +0 -0
  129. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/pipupgrade.py +0 -0
  130. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/ringlist.py +0 -0
  131. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/version_compare.py +0 -0
  132. {re_common-10.0.41 → re_common-10.0.42}/re_common/baselibrary/utils/ydmhttp.py +0 -0
  133. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/__init__.py +0 -0
  134. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/lazy_import.py +0 -0
  135. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/loggerfacade.py +0 -0
  136. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/mysqlfacade.py +0 -0
  137. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/now.py +0 -0
  138. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/sqlite3facade.py +0 -0
  139. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/use/__init__.py +0 -0
  140. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/use/mq_use_facade.py +0 -0
  141. {re_common-10.0.41 → re_common-10.0.42}/re_common/facade/use/proxy_use_facade.py +0 -0
  142. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/__init__.py +0 -0
  143. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/base_dict_test.py +0 -0
  144. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/baseavro_test.py +0 -0
  145. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/basefile_test.py +0 -0
  146. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/basemssql_test.py +0 -0
  147. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/baseodbc_test.py +0 -0
  148. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/basepandas_test.py +0 -0
  149. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/get_attr_test/__init__.py +0 -0
  150. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -0
  151. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/get_attr_test/settings.py +0 -0
  152. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/idencode_test.py +0 -0
  153. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/iniconfig_test.py +0 -0
  154. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/ip_test.py +0 -0
  155. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/merge_file_test.py +0 -0
  156. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/mfaker_test.py +0 -0
  157. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/mm3_test.py +0 -0
  158. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/mylogger_test.py +0 -0
  159. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/myparsel_test.py +0 -0
  160. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/mysql_test.py +0 -0
  161. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/pymongo_test.py +0 -0
  162. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/split_test.py +0 -0
  163. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/sqlite3_merge_test.py +0 -0
  164. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/sqlite3_test.py +0 -0
  165. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/tomlconfig_test.py +0 -0
  166. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/use_tools_test/__init__.py +0 -0
  167. {re_common-10.0.41 → re_common-10.0.42}/re_common/libtest/user/__init__.py +0 -0
  168. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/__init__.py +0 -0
  169. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/assignment_expressions.py +0 -0
  170. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/mydash/__init__.py +0 -0
  171. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/mydash/test1.py +0 -0
  172. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/pydashstudio/__init__.py +0 -0
  173. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/pydashstudio/first.py +0 -0
  174. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/streamlitstudio/__init__.py +0 -0
  175. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/streamlitstudio/first_app.py +0 -0
  176. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/streamlitstudio/uber_pickups.py +0 -0
  177. {re_common-10.0.41 → re_common-10.0.42}/re_common/studio/test.py +0 -0
  178. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/__init__.py +0 -0
  179. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/__init__.py +0 -0
  180. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +0 -0
  181. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/business_utils/__init__.py +0 -0
  182. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/business_utils/baseencodeid.py +0 -0
  183. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/business_utils/full_doi_path.py +0 -0
  184. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/business_utils/rel_tools.py +0 -0
  185. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/decorators/__init__.py +0 -0
  186. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/decorators/utils.py +0 -0
  187. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/__init__.py +0 -0
  188. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +0 -0
  189. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/search_packge/__init__.py +0 -0
  190. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +0 -0
  191. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +0 -0
  192. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/helpers/search_packge/test.py +0 -0
  193. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/s3object/__init__.py +0 -0
  194. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/s3object/baseboto3.py +0 -0
  195. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/WeChatRobot.py +0 -0
  196. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/__init__.py +0 -0
  197. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/ac_ahocorasick.py +0 -0
  198. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/concurrency.py +0 -0
  199. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/data_processer/__init__.py +0 -0
  200. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/data_processer/data_processer.py +0 -0
  201. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/data_processer/data_writer.py +0 -0
  202. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/dict_tools.py +0 -0
  203. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/dolphinscheduler.py +0 -0
  204. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/hdfs_base_processor.py +0 -0
  205. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +0 -0
  206. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/hdfs_data_processer.py +0 -0
  207. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/hdfs_line_processor.py +0 -0
  208. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/resume_tracker.py +0 -0
  209. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/search_hash_tools.py +0 -0
  210. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/text_matcher.py +0 -0
  211. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/tree_processor/__init__.py +0 -0
  212. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/tree_processor/builder.py +0 -0
  213. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/tree_processor/node.py +0 -0
  214. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/tools/unionfind_tools.py +0 -0
  215. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/BusinessStringUtil.py +0 -0
  216. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/__init__.py +0 -0
  217. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/author_smi.py +0 -0
  218. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/base_string_similarity.py +0 -0
  219. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/basedict.py +0 -0
  220. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/basehdfs.py +0 -0
  221. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/basepika.py +0 -0
  222. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/basetime.py +0 -0
  223. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/db.py +0 -0
  224. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/elasticsearch.py +0 -0
  225. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/json_cls.py +0 -0
  226. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/mq.py +0 -0
  227. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/n_ary_expression_tree.py +0 -0
  228. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/string_bool.py +0 -0
  229. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/string_clear.py +0 -0
  230. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/string_smi.py +0 -0
  231. {re_common-10.0.41 → re_common-10.0.42}/re_common/v2/baselibrary/utils/stringutils.py +0 -0
  232. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/__init__.py +0 -0
  233. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/base_step_process.py +0 -0
  234. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/baseencodeid.py +0 -0
  235. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/changetaskname.py +0 -0
  236. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/core_var.py +0 -0
  237. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/mmh3Hash.py +0 -0
  238. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/__init__.py +0 -0
  239. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/allproxys.py +0 -0
  240. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/allproxys_thread.py +0 -0
  241. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/cnki_proxy.py +0 -0
  242. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/kuaidaili.py +0 -0
  243. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/proxy_all.py +0 -0
  244. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/update_kuaidaili_0.py +0 -0
  245. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/wanfang_proxy.py +0 -0
  246. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/proxy/wp_proxy_all.py +0 -0
  247. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/read_rawid_to_txt.py +0 -0
  248. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/__init__.py +0 -0
  249. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformBookTitleToZt.py +0 -0
  250. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -0
  251. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -0
  252. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -0
  253. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -0
  254. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -0
  255. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -0
  256. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -0
  257. {re_common-10.0.41 → re_common-10.0.42}/re_common/vip/title/transform/__init__.py +0 -0
  258. {re_common-10.0.41 → re_common-10.0.42}/re_common.egg-info/dependency_links.txt +0 -0
  259. {re_common-10.0.41 → re_common-10.0.42}/re_common.egg-info/top_level.txt +0 -0
  260. {re_common-10.0.41 → re_common-10.0.42}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: re_common
3
- Version: 10.0.41
3
+ Version: 10.0.42
4
4
  Summary: a library about all python projects
5
5
  Home-page: https://gitee.com/xujiangios/re-common
6
6
  Author: vic
@@ -0,0 +1,48 @@
1
+ import aioboto3
2
+ import aiofiles
3
+ from aiobotocore.config import AioConfig
4
+
5
+
6
+ # config = AioConfig(connect_timeout=600000, read_timeout=600000, retries={'max_attempts': 3},
7
+ # max_pool_connections=10)
8
+
9
+ class BaseAioBoto3(object):
10
+
11
+ def __init__(self, aws_access_key_id, aws_secret_access_key, endpoint_url,
12
+ config=AioConfig(max_pool_connections=10)):
13
+ self.aws_access_key_id = aws_access_key_id
14
+ self.aws_secret_access_key = aws_secret_access_key
15
+ self.endpoint_url = endpoint_url
16
+ self.config = config
17
+ self.boto_session = None
18
+
19
+ async def initialize_class_variable(self):
20
+ if self.boto_session is None:
21
+ self.boto_session = aioboto3.Session(
22
+ aws_access_key_id=self.aws_access_key_id,
23
+ aws_secret_access_key=self.aws_secret_access_key,
24
+ )
25
+
26
+ async def read_minio_data(self, bucket, key):
27
+ await self.initialize_class_variable()
28
+ async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
29
+ s3_ob = await s3.get_object(Bucket=bucket, Key=key)
30
+ result = await s3_ob["Body"].read()
31
+ return result
32
+
33
+ # 异步下载大文件
34
+ async def download_file(self, bucket: str, key: str, local_path: str):
35
+ await self.initialize_class_variable()
36
+ async with self.boto_session.client("s3", endpoint_url=self.endpoint_url, config=self.config) as s3:
37
+ response = await s3.get_object(Bucket=bucket, Key=key)
38
+ body = response["Body"]
39
+
40
+ # 用异步方式写入本地
41
+ async with aiofiles.open(local_path, "wb") as f:
42
+ while True:
43
+ chunk = await body.read(10 * 1024 * 1024) # 每次读 10MB
44
+ if not chunk:
45
+ break
46
+ await f.write(chunk)
47
+
48
+ return local_path
@@ -4,9 +4,9 @@ from typing import List, Generator
4
4
 
5
5
  class BaseFileReader(ABC):
6
6
 
7
- def __init__(self, batch_size: int = 10000):
7
+ def __init__(self, batch_size: int = 10000, read_model: int = 1):
8
8
  self.batch_size = batch_size
9
- self.read_model = 1
9
+ self.read_model = read_model
10
10
 
11
11
  @abstractmethod
12
12
  def list_files(self, path: str) -> List[str]:
@@ -12,8 +12,9 @@ from re_common.v2.baselibrary.tools.data_processer.base import BaseFileReader
12
12
 
13
13
 
14
14
  class HDFSFileReader(BaseFileReader):
15
- def __init__(self, batch_size: int = 1000, hdfs_url: str = "http://VIP-DC-MASTER-2:9870", hdfs_user: str = "root"):
16
- super().__init__(batch_size)
15
+ def __init__(self, batch_size: int = 1000, read_model: int = 1, hdfs_url: str = "http://VIP-DC-MASTER-2:9870",
16
+ hdfs_user: str = "root"):
17
+ super().__init__(batch_size, read_model)
17
18
  self.client = InsecureClient(hdfs_url, user=hdfs_user)
18
19
 
19
20
  def list_files(self, path: str) -> List[str]:
@@ -48,8 +49,9 @@ class HDFSFileReader(BaseFileReader):
48
49
 
49
50
 
50
51
  class HDFSGZFileReader(BaseFileReader):
51
- def __init__(self, batch_size: int = 1000, hdfs_url: str = "http://VIP-DC-MASTER-2:9870", hdfs_user: str = "root"):
52
- super().__init__(batch_size)
52
+ def __init__(self, batch_size: int = 1000, read_model: int = 1, hdfs_url: str = "http://VIP-DC-MASTER-2:9870",
53
+ hdfs_user: str = "root"):
54
+ super().__init__(batch_size, read_model)
53
55
  self.hdfs_url = hdfs_url
54
56
  self.hdfs_user = hdfs_user
55
57
  self.client = None
@@ -99,8 +101,9 @@ class HDFSGZFileReader(BaseFileReader):
99
101
 
100
102
 
101
103
  class HDFSParquetFileReader(BaseFileReader):
102
- def __init__(self, batch_size: int = 1000, hdfs_url: str = "http://VIP-DC-MASTER-2:9870", hdfs_user: str = "root"):
103
- super().__init__(batch_size)
104
+ def __init__(self, batch_size: int = 1000, read_model: int = 1, hdfs_url: str = "http://VIP-DC-MASTER-2:9870",
105
+ hdfs_user: str = "root"):
106
+ super().__init__(batch_size, read_model)
104
107
  self.client = InsecureClient(hdfs_url, user=hdfs_user)
105
108
 
106
109
  def list_files(self, path: str) -> List[str]:
@@ -0,0 +1,27 @@
1
+ import json
2
+ import os
3
+
4
+
5
+ def scan_dir_fast(path):
6
+ file_infos = []
7
+ with os.scandir(path) as entries:
8
+ for entry in entries:
9
+ if entry.is_file():
10
+ info = entry.stat()
11
+ file_infos.append({
12
+ "path": entry.path,
13
+ "size": info.st_size
14
+ })
15
+ return file_infos
16
+
17
+
18
+ def scan_dir(dir_name, result_file):
19
+ # dir_name r"/share/fulltext/errors"
20
+ # result_file "file_info_errors.txt"
21
+ for root, dirs, files in os.walk(dir_name):
22
+ print(root)
23
+ lists = scan_dir_fast(root)
24
+ with open(result_file, "a", encoding="utf-8") as file:
25
+ for i in lists:
26
+ if i:
27
+ file.write(json.dumps(i, ensure_ascii=False) + "\n")
@@ -1,4 +1,5 @@
1
1
  import itertools
2
+ from collections import Counter
2
3
  from typing import List, Any, Tuple
3
4
 
4
5
 
@@ -67,4 +68,20 @@ def list_to_dict(list_data,key_name):
67
68
 
68
69
  def split_list_by_step(lst, step=100):
69
70
  # 一维列表按照步长转换成二维列表
70
- return [lst[i:i + step] for i in range(0, len(lst), step)]
71
+ return [lst[i:i + step] for i in range(0, len(lst), step)]
72
+
73
+
74
+ def list_diff(l1, l2):
75
+ """
76
+ 非去重差异比较
77
+ Counter 虽然长得像字典,但它在运算符 & 和 - 上有特殊的定义。
78
+ 这样 能获取重复差集
79
+ """
80
+ c1, c2 = Counter(l1), Counter(l2)
81
+ # 共同部分
82
+ common = list((c1 & c2).elements())
83
+ # l1 多余的部分
84
+ extra1 = list((c1 - c2).elements())
85
+ # l2 多余的部分
86
+ extra2 = list((c2 - c1).elements())
87
+ return common, extra1, extra2
@@ -1,8 +1,11 @@
1
1
  import atexit
2
+ import os
2
3
  import sys
3
4
  import asyncio
5
+ import traceback
6
+
4
7
  import aiohttp
5
- from typing import Optional
8
+ from typing import Optional, Union
6
9
 
7
10
  from tenacity import retry, stop_after_attempt, wait_random
8
11
 
@@ -62,6 +65,13 @@ def on_retry_error(retry_state):
62
65
 
63
66
  def on_retry(retry_state):
64
67
  # 每次抛错进入该函数打印消息
68
+
69
+ # # 获取函数调用参数
70
+ # args = retry_state.args
71
+ # kwargs = retry_state.kwargs
72
+ #
73
+ # print(id(args[0]._get_session()))
74
+
65
75
  print(
66
76
  f"[HTTP 请求重试]"
67
77
  f"当前重试 : 第 {retry_state.attempt_number} 次"
@@ -84,6 +94,8 @@ class ApiNetUtils:
84
94
  _conn: Optional[aiohttp.TCPConnector] = None
85
95
  _session: Optional[aiohttp.ClientSession] = None
86
96
  _close_registered: bool = False # 确保清理函数只注册一次
97
+ _pid: Optional[int] = None # 当前进程的 PID
98
+ lock = asyncio.Lock()
87
99
 
88
100
  @classmethod
89
101
  async def _get_connector(cls) -> aiohttp.TCPConnector:
@@ -96,9 +108,9 @@ class ApiNetUtils:
96
108
  cls._conn = aiohttp.TCPConnector(
97
109
  limit=50, # 最大连接数
98
110
  ssl=False, # 禁用SSL验证(按需开启)
99
- force_close=True, # 保持连接活跃
100
- # enable_cleanup_closed=True, # 自动清理关闭的连接 #
101
- # keepalive_timeout=4.99 # 比服务器的5s 小一点
111
+ force_close=False, # 保持连接活跃
112
+ enable_cleanup_closed=True, # 自动清理关闭的连接 #
113
+ keepalive_timeout=4.99 # 比服务器的5s 小一点
102
114
  )
103
115
  return cls._conn
104
116
 
@@ -108,25 +120,41 @@ class ApiNetUtils:
108
120
  获取共享会话(线程安全的延迟初始化)
109
121
  包含自动注册清理机制
110
122
  """
111
- if cls._session is None or cls._session.closed or cls.is_loop_closed(cls._session):
112
- if cls._session:
113
- await cls.close()
114
- # 获取连接器(会自动初始化)
115
- connector = await cls._get_connector()
116
-
117
- # 强制获取新的事件循环
118
- loop = asyncio.get_event_loop()
123
+ async with cls.lock:
124
+ current_pid = os.getpid()
125
+ if cls._pid != current_pid:
126
+ # 新进程,重新初始化
127
+ if cls._session:
128
+ await cls.close()
129
+ cls._pid = current_pid
130
+
131
+ if cls._session is None or cls._session.closed or cls.is_loop_closed(cls._session):
132
+ if cls._session:
133
+ await cls.close()
134
+ # 获取连接器(会自动初始化)
135
+ connector = await cls._get_connector()
136
+
137
+ # 强制获取新的事件循环
138
+ loop = asyncio.get_event_loop()
139
+
140
+ timeout = aiohttp.ClientTimeout(
141
+ total=120, # 整个请求最多 30 秒
142
+ connect=10, # 最多 5 秒连接
143
+ sock_connect=10,
144
+ sock_read=110, # 最多 20 秒读取响应数据
145
+ )
119
146
 
120
- # 创建新会话
121
- cls._session = aiohttp.ClientSession(
122
- connector=connector,
123
- timeout=aiohttp.ClientTimeout(total=30), # 默认30秒超时
124
- loop=loop) # 显式指定事件循环
147
+ # 创建新会话
148
+ cls._session = aiohttp.ClientSession(
149
+ connector=connector,
150
+ timeout=timeout, # 默认30秒超时
151
+ loop=loop,
152
+ ) # 显式指定事件循环
125
153
 
126
- # # 注册退出时的清理钩子
127
- cls._register_cleanup()
154
+ # # 注册退出时的清理钩子
155
+ cls._register_cleanup()
128
156
 
129
- return cls._session
157
+ return cls._session
130
158
 
131
159
  @staticmethod
132
160
  def is_loop_closed(session: aiohttp.ClientSession) -> bool:
@@ -135,7 +163,7 @@ class ApiNetUtils:
135
163
  """
136
164
  loop = session._loop # 获取会话绑定的事件循环
137
165
  if loop.is_closed():
138
- # print("Event loop is closed")
166
+ print("Event loop is closed")
139
167
  return True
140
168
  # print("Event loop not is closed")
141
169
  return False
@@ -0,0 +1,178 @@
1
+ import itertools
2
+ from typing import List, Any
3
+
4
+ from pypinyin import pinyin, Style
5
+
6
+
7
+ class PinyinUtils:
8
+ @staticmethod
9
+ def get_pinyin_or_char(text: str) -> str:
10
+ """拼音 + 非中文原样返回 对应 toPinyin"""
11
+ result = []
12
+ for char in text:
13
+ if PinyinUtils.is_chinese(char):
14
+ py_one = pinyin(char, style=Style.NORMAL, v_to_u=True, heteronym=True)
15
+ result.append(py_one[0][0] if py_one else char)
16
+ else:
17
+ result.append(char)
18
+ return "".join(result)
19
+
20
+ @staticmethod
21
+ def get_pinyin_or_char_ex(text: str) -> str:
22
+ """拼音 + 非中文原样返回 对应 toPinyin"""
23
+ result = []
24
+ for char in text:
25
+ if PinyinUtils.is_chinese(char):
26
+ py_one = pinyin(char, style=Style.NORMAL, v_to_u=True, heteronym=True)
27
+ result.append("|".join(py_one[0]) if py_one else char)
28
+ else:
29
+ result.append(char)
30
+ return "".join(result)
31
+
32
+ @staticmethod
33
+ def is_chinese(char: str) -> bool:
34
+ """判断是否为汉字"""
35
+ return "\u4e00" <= char <= "\u9fff"
36
+
37
+ @staticmethod
38
+ def combine(lists: List[List[Any]]) -> list:
39
+ # lists = [[1, 2],['a', 'b'],[True, False]]
40
+ # 计算笛卡尔积
41
+ cartesian_product = list(itertools.product(*lists))
42
+
43
+ return [" ".join([str(ii) for ii in list(i)]) for i in cartesian_product]
44
+
45
+ @staticmethod
46
+ def to_pinyin_names(name: str) -> List[str]:
47
+ """
48
+ 将中文姓名转换为所有可能的拼音组合
49
+
50
+ Args:
51
+ name: 中文姓名字符串
52
+
53
+ Returns:
54
+ 所有可能的拼音组合列表
55
+ """
56
+ if not name:
57
+ return []
58
+
59
+ pinyin_options = []
60
+
61
+ for char in name:
62
+ py_one = PinyinUtils.get_pinyin_or_char_ex(char)
63
+ variants = []
64
+
65
+ if "ü" in py_one:
66
+ # 处理ü的特殊情况,生成u和v两种变体
67
+ for replacement in ["u", "v"]:
68
+ replaced = py_one.replace("ü", replacement)
69
+ variants.extend(replaced.split("|"))
70
+ variants = list(set(variants))
71
+ else:
72
+ variants = py_one.split("|")
73
+
74
+ pinyin_options.append(variants)
75
+
76
+ return PinyinUtils.combine(pinyin_options)
77
+
78
+ @staticmethod
79
+ def to_pinyin_name(name: str) -> str:
80
+ """
81
+ 将中文姓名转换为拼音字符串
82
+
83
+ Args:
84
+ name: 中文字符串
85
+
86
+ Returns:
87
+ 拼音字符串,用空格分隔每个字的拼音
88
+ """
89
+ result = []
90
+ for char in name:
91
+ py_one = PinyinUtils.get_pinyin_or_char(char).replace("ü", "v")
92
+ result.append(py_one)
93
+ return " ".join(result)
94
+
95
+
96
+ VALID_PINYINS = {
97
+ "a", "o", "e", "ai", "ei", "ao", "ou", "an", "en", "ang", "eng", "er",
98
+ "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu",
99
+ "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pu",
100
+ "ma", "mai", "man", "mang", "mao", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "mo",
101
+ "mou",
102
+ "mu",
103
+ "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu",
104
+ "da", "dai", "dan", "dang", "dao", "dei", "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong",
105
+ "dou",
106
+ "du", "duan", "dui", "dun", "duo",
107
+ "ta", "tai", "tan", "tang", "tao", "tei", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu",
108
+ "tuan",
109
+ "tui", "tun", "tuo",
110
+ "na", "nai", "nan", "nang", "nao", "nei", "nen", "neng", "ni", "nian", "niang", "niao", "nie", "nin", "ning",
111
+ "niu",
112
+ "nong", "nou", "nu", "nuan", "nue", "nv",
113
+ "la", "lai", "lan", "lang", "lao", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling",
114
+ "liu",
115
+ "lo", "long", "lou", "lu", "luan", "lue", "lv",
116
+ "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan",
117
+ "guang",
118
+ "gui", "gun", "guo",
119
+ "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang",
120
+ "kui",
121
+ "kun", "kuo",
122
+ "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan",
123
+ "huang",
124
+ "hui", "hun", "huo",
125
+ "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun",
126
+ "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun",
127
+ "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun",
128
+ "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhei", "zhen", "zheng", "zhong", "zhou", "zhu", "zhua", "zhuai",
129
+ "zhuan", "zhuang", "zhui", "zhun", "zhuo",
130
+ "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai",
131
+ "chuan", "chuang", "chui", "chun", "chuo",
132
+ "sha", "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai",
133
+ "shuan", "shuang", "shui", "shun", "shuo",
134
+ "ra", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "rua", "ruan", "rui", "run", "ruo",
135
+ "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo",
136
+ "ca", "cai", "can", "cang", "cao", "ce", "cen", "ceng", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo",
137
+ "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "song", "sou", "su", "suan", "sui", "sun", "suo",
138
+ "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun",
139
+ "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu"
140
+ }
141
+
142
+
143
+ def split_pinyin_all(s):
144
+ s = s.lower()
145
+ results = []
146
+
147
+ def dfs(start, path):
148
+ if start == len(s):
149
+ results.append(path[:])
150
+ return
151
+ for end in range(start + 1, min(len(s), start + 6) + 1):
152
+ part = s[start:end]
153
+ if part in VALID_PINYINS:
154
+ path.append(part)
155
+ dfs(end, path)
156
+ path.pop()
157
+
158
+ dfs(0, [])
159
+ return results
160
+
161
+
162
+ def is_pinyin(word):
163
+ """检测一个字符串是否是合法拼音(无歧义)"""
164
+ try:
165
+ # 尝试转换为拼音,如果原词是拼音,转换结果应该和原词相近
166
+ pinyin_list = pinyin(word, style=Style.NORMAL)
167
+ reconstructed = "".join([p[0] for p in pinyin_list])
168
+ # 检查转换后的拼音是否与原词相似(忽略大小写)
169
+ return word.lower() == reconstructed.lower()
170
+ except:
171
+ return False
172
+
173
+ def split_pinyin(word):
174
+ lists = split_pinyin_all(word)
175
+ lists = [" ".join(i) for i in lists]
176
+ if not lists:
177
+ return [word]
178
+ return lists
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: re_common
3
- Version: 10.0.41
3
+ Version: 10.0.42
4
4
  Summary: a library about all python projects
5
5
  Home-page: https://gitee.com/xujiangios/re-common
6
6
  Author: vic
@@ -185,12 +185,14 @@ re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py
185
185
  re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py
186
186
  re_common/v2/baselibrary/helpers/search_packge/test.py
187
187
  re_common/v2/baselibrary/s3object/__init__.py
188
+ re_common/v2/baselibrary/s3object/baseaioboto3.py
188
189
  re_common/v2/baselibrary/s3object/baseboto3.py
189
190
  re_common/v2/baselibrary/tools/WeChatRobot.py
190
191
  re_common/v2/baselibrary/tools/__init__.py
191
192
  re_common/v2/baselibrary/tools/ac_ahocorasick.py
192
193
  re_common/v2/baselibrary/tools/concurrency.py
193
194
  re_common/v2/baselibrary/tools/dict_tools.py
195
+ re_common/v2/baselibrary/tools/dir_file_tools.py
194
196
  re_common/v2/baselibrary/tools/dolphinscheduler.py
195
197
  re_common/v2/baselibrary/tools/hdfs_base_processor.py
196
198
  re_common/v2/baselibrary/tools/hdfs_bulk_processor.py
@@ -223,6 +225,7 @@ re_common/v2/baselibrary/utils/elasticsearch.py
223
225
  re_common/v2/baselibrary/utils/json_cls.py
224
226
  re_common/v2/baselibrary/utils/mq.py
225
227
  re_common/v2/baselibrary/utils/n_ary_expression_tree.py
228
+ re_common/v2/baselibrary/utils/pinyin_utils.py
226
229
  re_common/v2/baselibrary/utils/string_bool.py
227
230
  re_common/v2/baselibrary/utils/string_clear.py
228
231
  re_common/v2/baselibrary/utils/string_smi.py
@@ -34,7 +34,7 @@ long_description = """
34
34
  """
35
35
  setuptools.setup(
36
36
  name="re_common",
37
- version="10.0.41",
37
+ version="10.0.42",
38
38
  author="vic",
39
39
  author_email="xujiang5@163.com",
40
40
  description="a library about all python projects",
File without changes
File without changes
File without changes