re-common 10.0.22__py3-none-any.whl → 10.0.24__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +195 -0
  145. re_common/v2/baselibrary/business_utils/__init__.py +0 -0
  146. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -0
  147. re_common/v2/baselibrary/decorators/utils.py +59 -59
  148. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  149. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -79
  150. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  151. re_common/v2/baselibrary/tools/dict_tools.py +37 -37
  152. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  153. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  154. re_common/v2/baselibrary/tools/list_tools.py +65 -65
  155. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  156. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  157. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  158. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  159. re_common/v2/baselibrary/utils/author_smi.py +360 -360
  160. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  161. re_common/v2/baselibrary/utils/basedict.py +37 -37
  162. re_common/v2/baselibrary/utils/basehdfs.py +161 -161
  163. re_common/v2/baselibrary/utils/basepika.py +180 -180
  164. re_common/v2/baselibrary/utils/basetime.py +77 -77
  165. re_common/v2/baselibrary/utils/db.py +38 -38
  166. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  167. re_common/v2/baselibrary/utils/mq.py +83 -83
  168. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  169. re_common/v2/baselibrary/utils/string_bool.py +186 -149
  170. re_common/v2/baselibrary/utils/string_clear.py +227 -204
  171. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  172. re_common/v2/baselibrary/utils/stringutils.py +213 -213
  173. re_common/vip/base_step_process.py +11 -11
  174. re_common/vip/baseencodeid.py +90 -90
  175. re_common/vip/changetaskname.py +28 -28
  176. re_common/vip/core_var.py +24 -24
  177. re_common/vip/mmh3Hash.py +89 -89
  178. re_common/vip/proxy/allproxys.py +127 -127
  179. re_common/vip/proxy/allproxys_thread.py +159 -159
  180. re_common/vip/proxy/cnki_proxy.py +153 -153
  181. re_common/vip/proxy/kuaidaili.py +87 -87
  182. re_common/vip/proxy/proxy_all.py +113 -113
  183. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  184. re_common/vip/proxy/wanfang_proxy.py +152 -152
  185. re_common/vip/proxy/wp_proxy_all.py +181 -181
  186. re_common/vip/read_rawid_to_txt.py +91 -91
  187. re_common/vip/title/__init__.py +5 -5
  188. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  189. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  190. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  191. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  192. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  193. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  194. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  195. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  196. re_common/vip/title/transform/__init__.py +10 -10
  197. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/LICENSE +201 -201
  198. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/METADATA +16 -16
  199. re_common-10.0.24.dist-info/RECORD +230 -0
  200. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/WHEEL +1 -1
  201. re_common-10.0.22.dist-info/RECORD +0 -227
  202. {re_common-10.0.22.dist-info → re_common-10.0.24.dist-info}/top_level.txt +0 -0
@@ -1,382 +1,382 @@
1
- import re
2
- import string
3
-
4
- # 7-bit C1 ANSI escape sequences
5
- # https://www.cnblogs.com/longdouhzt/archive/2012/09/25/2703173.html
6
- ANSI_ESCAPE = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]')
7
-
8
-
9
- class BaseString():
10
-
11
- @classmethod
12
- def r_strip_one_char(cls, string):
13
- """
14
- 去除右边的一个字符
15
- :param string:
16
- :return:
17
- """
18
- string = string[:-1]
19
- return string
20
-
21
- @classmethod
22
- def r_strip_substring(cls, string, substring):
23
- """
24
- 移除子字符串
25
- :param string:
26
- :param substring:
27
- :return:
28
- """
29
- return string.rstrip(substring)
30
-
31
- @classmethod
32
- def r_strip_char(cls, string, number):
33
- """
34
- 删除右边指定个数的字符串
35
- :param string: 需要处理的字符串
36
- :param number: 右边需要删除的字符个数
37
- :return:
38
- """
39
- if number > 0:
40
- number = 0 - number
41
- elif number == 0:
42
- return string
43
-
44
- string = string[:number]
45
- return string
46
-
47
- @classmethod
48
- def get_strings_line_num(cls, strings, substrings, start=None, end=None):
49
- """
50
- 方法用于统计字符串里某个字符出现的次数
51
- sub -- 搜索的子字符串
52
- start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
53
- end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
54
- :param filePath:
55
- :return:
56
- """
57
- if start is None:
58
- start = 0
59
- if end is None:
60
- end = len(strings)
61
- return strings.count(substrings, start=start, end=end)
62
-
63
- def filter_string_blank_space(self, filterobj):
64
- """
65
- 过滤字符串空格
66
- 例如 list = [' n 1 2', ' c 4s r ']
67
- :return ['n12', 'c4sr']
68
-
69
- """
70
- if isinstance(filterobj, str):
71
- return "".join(filterobj.split())
72
- if isinstance(filterobj, list):
73
- listobj = ["".join(x.split()) for x in filterobj]
74
- return listobj
75
- else:
76
- assert "not have this Type,please check parameter Type" + __file__
77
-
78
- def string_to_list(self, string):
79
- """
80
- string 转换成list
81
- :param string:
82
- :return: 一个list每个元素一个char
83
- """
84
- mlist = [string[x] for x in range(len(string))]
85
- return mlist
86
-
87
- def parallelIterations(self, lista, listb):
88
- """
89
- 并行迭代 会迭代出最少的那个 如下面的f被丢弃
90
- if (lista is None and listb is None):
91
- lista = ['1', '2', '3', '4', '5']
92
- listb = ['a', 'b', 'c', 'd', 'e', 'f']
93
- :param lista:
94
- :param listb:
95
- :return:
96
- """
97
- for aa, bb in zip(lista, listb):
98
- yield aa, bb
99
-
100
- def list_to_string(self, mlist):
101
- """
102
- b = ['a', 'b', 'c', 'd', 'e', 'f']
103
- :param mlist:
104
- :return: string abcdef
105
- """
106
- return "".join(mlist)
107
-
108
- def find_sub(self, strings, substr):
109
- """
110
- strings是否存在sunstr
111
- :param strings:
112
- :param substr:
113
- :return:
114
- """
115
- num = strings.find(substr)
116
- if num == -1:
117
- return False
118
- else:
119
- return num
120
-
121
- @classmethod
122
- def cleanSemicolon(cls, text):
123
- """
124
- 中文分号到英文分号的替换
125
- 字符串前后分号的去除
126
- 连续分号的合并
127
- 分号前后空格的去除
128
- :param text:
129
- :return:
130
- """
131
- text = text.replace(';', ';')
132
- text = re.sub("\s+;", ";", text)
133
- text = re.sub(";\s+", ";", text)
134
- text = re.sub(";+", ";", text)
135
- text = re.sub("^;", "", text)
136
- text = re.sub(";$", "", text)
137
- return text.strip()
138
-
139
- def intercept_strings(self, str):
140
- """
141
- str = ‘0123456789’
142
- print str[0:3] #截取第一位到第三位的字符
143
- print str[:] #截取字符串的全部字符
144
- print str[6:] #截取第七个字符到结尾
145
- print str[:-3] #截取从头开始到倒数第三个字符之前
146
- print str[2] #截取第三个字符
147
- print str[-1] #截取倒数第一个字符
148
- print str[::-1] #创造一个与原字符串顺序相反的字符串
149
- print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
150
- print str[-3:] #截取倒数第三位到结尾
151
- print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
152
- 截取字符串
153
- :param str: 仅供参考使用
154
- :return:
155
- """
156
-
157
- def eval(self, strs):
158
- """
159
- 将str当有效表达式
160
- :return:
161
- """
162
- return eval(strs)
163
-
164
- def lower(self, strs):
165
- """
166
- 小写
167
- :param strs:
168
- :return:
169
- """
170
- return strs.lower()
171
-
172
- def upper(self, strs):
173
- """
174
- 大写
175
- :param strs:
176
- :return:
177
- """
178
- return strs.upper()
179
-
180
- def swapcase(self, strs):
181
- """
182
- 将字符串中的大写字母转为小写,小写字母转为大写
183
- :param strs:
184
- :return:
185
- """
186
- return strs.swapcase()
187
-
188
- def capitalize(self, strs):
189
- """
190
- 字符串中的第一个字母大写,其他小写
191
- :param strs:
192
- :return:
193
- """
194
- return strs.capitalize()
195
-
196
- def title(self, strs):
197
- """
198
- 将字符串中的每隔单词的首字母大写
199
- :param strs:
200
- :return:
201
- """
202
- return strs.title()
203
-
204
- def fillchar(self):
205
- """
206
- 返回一个指定长度width的字符串str这个字符串在中间,其他位置用fillchar补全,默认是空格
207
- str3 = "1234"
208
-
209
- print(str3.center(15, "*"))
210
- print(str3.ljust(15, "*"))
211
- print(str3.rjust(15, "*"))
212
- print(str3.zfill(15)) #0补充
213
-
214
- ******1234*****
215
- 1234***********
216
- ***********1234
217
- 000000000001234
218
-
219
-
220
- s为字符串
221
- s.isalnum() 所有字符都是数字或者字母
222
- s.isalpha() 所有字符都是字母
223
- s.isdigit() 所有字符都是数字
224
- s.islower() 所有字符都是小写
225
- s.isupper() 所有字符都是大写
226
- s.istitle() 所有单词都是首字母大写,像标题
227
- s.isspace() 所有字符都是空白字符、\t、\n、\r
228
- 参考
229
- :return:
230
- """
231
- pass
232
-
233
- @classmethod
234
- def hasnum(self, strings):
235
- """
236
- 判断字符串是否有数字
237
- :param strings:
238
- :return:
239
- """
240
- return any(char.isdigit() for char in strings)
241
-
242
- @classmethod
243
- def chinese2digits(cls, uchars_chinese):
244
-
245
- common_used_numerals_tmp = {'零': 0, '一': 1, '二': 2, '两': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8,
246
- '九': 9,
247
- '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}
248
- total = 0
249
- r = 1 # 表示单位:个十百千...
250
- for i in range(len(uchars_chinese) - 1, -1, -1):
251
- # print(uchars_chinese[i])
252
- val = common_used_numerals_tmp.get(uchars_chinese[i])
253
- if val >= 10 and i == 0: # 应对 十三 十四 十*之类
254
- if val > r:
255
- r = val
256
- total = total + val
257
- else:
258
- r = r * val
259
- # total =total + r * x
260
- elif val >= 10:
261
- if val > r:
262
- r = val
263
- else:
264
- r = r * val
265
- else:
266
- total = total + r * val
267
- return total
268
-
269
- @classmethod
270
- def is_space(cls, strings):
271
- """
272
- 判断字符串是否全是空格
273
- :param strings:
274
- :return:
275
- """
276
- return strings.isspace()
277
-
278
- def str_full_to_half(self, ustring):
279
- """
280
- 把字符串全角转半角
281
- 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
282
- 半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
283
- 空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)
284
- 而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
285
- 所以可以直接通过用+-法来处理非空格数据,对空格单独处理
286
- """
287
- rstring = ""
288
- for uchar in ustring:
289
- # 返回值是对应的十进制整数。
290
- # ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
291
- inside_code = ord(uchar)
292
- if inside_code == 0x3000:
293
- inside_code = 0x0020
294
- else:
295
- inside_code -= 0xfee0
296
- if not (0x0020 < inside_code and inside_code <= 0x7e): # 转完之后不是半角字符返回原来的字符
297
- rstring += uchar
298
- continue
299
- rstring += chr(inside_code)
300
- return rstring
301
-
302
- def str_half_to_full(self, ustring):
303
- """把字符串半角转全角"""
304
- rstring = ""
305
- for uchar in ustring:
306
- inside_code = ord(uchar)
307
- if inside_code == 0x0020: # 除了空格其他的全角半角的公式为:半角=全角-0xfee0
308
- inside_code = 0x3000
309
- else:
310
- if not (0x0020 < inside_code and inside_code <= 0x7e):
311
- rstring += uchar
312
- continue
313
- inside_code += 0xfee0
314
- rstring += chr(inside_code)
315
- return rstring
316
-
317
- def is_chinese(self, strings):
318
- """
319
- 检查整个字符串是否包含中文
320
- :param string: 需要检查的字符串
321
- :return: bool
322
- """
323
- for ch in strings:
324
- if u'\u4e00' <= ch <= u'\u9fff':
325
- return True
326
- return False
327
-
328
- def delete_char(self, strings):
329
- """
330
- 去除特殊字符,只保留汉子,字母、数字
331
- :return:
332
- """
333
- sub_str = re.sub("([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", strings)
334
- return sub_str
335
-
336
- def is_sub_str(self, strs, substrs):
337
- """
338
- 判断substrs 是否存在strs中
339
- strs.find(substrs)>=0
340
- strs.index(substrs)>=0
341
- strs.count(substrs)>=0
342
- :param strs:
343
- :param sbustrs:
344
- :return:
345
- """
346
- return substrs in strs
347
-
348
- def remove_escape_codes(self, text):
349
- """
350
- Remove ANSI escapes codes from string. It's used to remove
351
- "colors" from log messages.
352
- """
353
- return ANSI_ESCAPE.sub("", text)
354
-
355
- @classmethod
356
- def is_num_float(cls, in_str):
357
- """
358
- 判定是数字或者float
359
- :param in_str:
360
- :return:
361
- """
362
- if in_str.isdigit():
363
- return True
364
- else:
365
- try:
366
- float(in_str)
367
- return True
368
- except:
369
- return False
370
-
371
- @classmethod
372
- def ucode_str(cls, strs):
373
- """
374
- 一种全角转半角的解决方案
375
- https://stackoverflow.com/questions/2422177/python-how-can-i-replace-full-width-characters-with-half-width-characters
376
- :param strs:
377
- :return:
378
- """
379
- import unicodedata
380
- # foo = "H15"
381
- # print(unicodedata.normalize('NFKC', foo))
382
- return unicodedata.normalize('NFKC', strs)
1
+ import re
2
+ import string
3
+
4
+ # 7-bit C1 ANSI escape sequences
5
+ # https://www.cnblogs.com/longdouhzt/archive/2012/09/25/2703173.html
6
+ ANSI_ESCAPE = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]')
7
+
8
+
9
+ class BaseString():
10
+
11
+ @classmethod
12
+ def r_strip_one_char(cls, string):
13
+ """
14
+ 去除右边的一个字符
15
+ :param string:
16
+ :return:
17
+ """
18
+ string = string[:-1]
19
+ return string
20
+
21
+ @classmethod
22
+ def r_strip_substring(cls, string, substring):
23
+ """
24
+ 移除子字符串
25
+ :param string:
26
+ :param substring:
27
+ :return:
28
+ """
29
+ return string.rstrip(substring)
30
+
31
+ @classmethod
32
+ def r_strip_char(cls, string, number):
33
+ """
34
+ 删除右边指定个数的字符串
35
+ :param string: 需要处理的字符串
36
+ :param number: 右边需要删除的字符个数
37
+ :return:
38
+ """
39
+ if number > 0:
40
+ number = 0 - number
41
+ elif number == 0:
42
+ return string
43
+
44
+ string = string[:number]
45
+ return string
46
+
47
+ @classmethod
48
+ def get_strings_line_num(cls, strings, substrings, start=None, end=None):
49
+ """
50
+ 方法用于统计字符串里某个字符出现的次数
51
+ sub -- 搜索的子字符串
52
+ start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
53
+ end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
54
+ :param filePath:
55
+ :return:
56
+ """
57
+ if start is None:
58
+ start = 0
59
+ if end is None:
60
+ end = len(strings)
61
+ return strings.count(substrings, start=start, end=end)
62
+
63
+ def filter_string_blank_space(self, filterobj):
64
+ """
65
+ 过滤字符串空格
66
+ 例如 list = [' n 1 2', ' c 4s r ']
67
+ :return ['n12', 'c4sr']
68
+
69
+ """
70
+ if isinstance(filterobj, str):
71
+ return "".join(filterobj.split())
72
+ if isinstance(filterobj, list):
73
+ listobj = ["".join(x.split()) for x in filterobj]
74
+ return listobj
75
+ else:
76
+ assert "not have this Type,please check parameter Type" + __file__
77
+
78
+ def string_to_list(self, string):
79
+ """
80
+ string 转换成list
81
+ :param string:
82
+ :return: 一个list每个元素一个char
83
+ """
84
+ mlist = [string[x] for x in range(len(string))]
85
+ return mlist
86
+
87
+ def parallelIterations(self, lista, listb):
88
+ """
89
+ 并行迭代 会迭代出最少的那个 如下面的f被丢弃
90
+ if (lista is None and listb is None):
91
+ lista = ['1', '2', '3', '4', '5']
92
+ listb = ['a', 'b', 'c', 'd', 'e', 'f']
93
+ :param lista:
94
+ :param listb:
95
+ :return:
96
+ """
97
+ for aa, bb in zip(lista, listb):
98
+ yield aa, bb
99
+
100
+ def list_to_string(self, mlist):
101
+ """
102
+ b = ['a', 'b', 'c', 'd', 'e', 'f']
103
+ :param mlist:
104
+ :return: string abcdef
105
+ """
106
+ return "".join(mlist)
107
+
108
+ def find_sub(self, strings, substr):
109
+ """
110
+ strings是否存在sunstr
111
+ :param strings:
112
+ :param substr:
113
+ :return:
114
+ """
115
+ num = strings.find(substr)
116
+ if num == -1:
117
+ return False
118
+ else:
119
+ return num
120
+
121
+ @classmethod
122
+ def cleanSemicolon(cls, text):
123
+ """
124
+ 中文分号到英文分号的替换
125
+ 字符串前后分号的去除
126
+ 连续分号的合并
127
+ 分号前后空格的去除
128
+ :param text:
129
+ :return:
130
+ """
131
+ text = text.replace(';', ';')
132
+ text = re.sub("\s+;", ";", text)
133
+ text = re.sub(";\s+", ";", text)
134
+ text = re.sub(";+", ";", text)
135
+ text = re.sub("^;", "", text)
136
+ text = re.sub(";$", "", text)
137
+ return text.strip()
138
+
139
+ def intercept_strings(self, str):
140
+ """
141
+ str = ‘0123456789’
142
+ print str[0:3] #截取第一位到第三位的字符
143
+ print str[:] #截取字符串的全部字符
144
+ print str[6:] #截取第七个字符到结尾
145
+ print str[:-3] #截取从头开始到倒数第三个字符之前
146
+ print str[2] #截取第三个字符
147
+ print str[-1] #截取倒数第一个字符
148
+ print str[::-1] #创造一个与原字符串顺序相反的字符串
149
+ print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
150
+ print str[-3:] #截取倒数第三位到结尾
151
+ print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
152
+ 截取字符串
153
+ :param str: 仅供参考使用
154
+ :return:
155
+ """
156
+
157
+ def eval(self, strs):
158
+ """
159
+ 将str当有效表达式
160
+ :return:
161
+ """
162
+ return eval(strs)
163
+
164
+ def lower(self, strs):
165
+ """
166
+ 小写
167
+ :param strs:
168
+ :return:
169
+ """
170
+ return strs.lower()
171
+
172
+ def upper(self, strs):
173
+ """
174
+ 大写
175
+ :param strs:
176
+ :return:
177
+ """
178
+ return strs.upper()
179
+
180
+ def swapcase(self, strs):
181
+ """
182
+ 将字符串中的大写字母转为小写,小写字母转为大写
183
+ :param strs:
184
+ :return:
185
+ """
186
+ return strs.swapcase()
187
+
188
+ def capitalize(self, strs):
189
+ """
190
+ 字符串中的第一个字母大写,其他小写
191
+ :param strs:
192
+ :return:
193
+ """
194
+ return strs.capitalize()
195
+
196
+ def title(self, strs):
197
+ """
198
+ 将字符串中的每隔单词的首字母大写
199
+ :param strs:
200
+ :return:
201
+ """
202
+ return strs.title()
203
+
204
+ def fillchar(self):
205
+ """
206
+ 返回一个指定长度width的字符串str这个字符串在中间,其他位置用fillchar补全,默认是空格
207
+ str3 = "1234"
208
+
209
+ print(str3.center(15, "*"))
210
+ print(str3.ljust(15, "*"))
211
+ print(str3.rjust(15, "*"))
212
+ print(str3.zfill(15)) #0补充
213
+
214
+ ******1234*****
215
+ 1234***********
216
+ ***********1234
217
+ 000000000001234
218
+
219
+
220
+ s为字符串
221
+ s.isalnum() 所有字符都是数字或者字母
222
+ s.isalpha() 所有字符都是字母
223
+ s.isdigit() 所有字符都是数字
224
+ s.islower() 所有字符都是小写
225
+ s.isupper() 所有字符都是大写
226
+ s.istitle() 所有单词都是首字母大写,像标题
227
+ s.isspace() 所有字符都是空白字符、\t、\n、\r
228
+ 参考
229
+ :return:
230
+ """
231
+ pass
232
+
233
+ @classmethod
234
+ def hasnum(self, strings):
235
+ """
236
+ 判断字符串是否有数字
237
+ :param strings:
238
+ :return:
239
+ """
240
+ return any(char.isdigit() for char in strings)
241
+
242
+ @classmethod
243
+ def chinese2digits(cls, uchars_chinese):
244
+
245
+ common_used_numerals_tmp = {'零': 0, '一': 1, '二': 2, '两': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8,
246
+ '九': 9,
247
+ '十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000}
248
+ total = 0
249
+ r = 1 # 表示单位:个十百千...
250
+ for i in range(len(uchars_chinese) - 1, -1, -1):
251
+ # print(uchars_chinese[i])
252
+ val = common_used_numerals_tmp.get(uchars_chinese[i])
253
+ if val >= 10 and i == 0: # 应对 十三 十四 十*之类
254
+ if val > r:
255
+ r = val
256
+ total = total + val
257
+ else:
258
+ r = r * val
259
+ # total =total + r * x
260
+ elif val >= 10:
261
+ if val > r:
262
+ r = val
263
+ else:
264
+ r = r * val
265
+ else:
266
+ total = total + r * val
267
+ return total
268
+
269
+ @classmethod
270
+ def is_space(cls, strings):
271
+ """
272
+ 判断字符串是否全是空格
273
+ :param strings:
274
+ :return:
275
+ """
276
+ return strings.isspace()
277
+
278
+ def str_full_to_half(self, ustring):
279
+ """
280
+ 把字符串全角转半角
281
+ 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
282
+ 半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
283
+ 空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)
284
+ 而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
285
+ 所以可以直接通过用+-法来处理非空格数据,对空格单独处理
286
+ """
287
+ rstring = ""
288
+ for uchar in ustring:
289
+ # 返回值是对应的十进制整数。
290
+ # ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
291
+ inside_code = ord(uchar)
292
+ if inside_code == 0x3000:
293
+ inside_code = 0x0020
294
+ else:
295
+ inside_code -= 0xfee0
296
+ if not (0x0020 < inside_code and inside_code <= 0x7e): # 转完之后不是半角字符返回原来的字符
297
+ rstring += uchar
298
+ continue
299
+ rstring += chr(inside_code)
300
+ return rstring
301
+
302
+ def str_half_to_full(self, ustring):
303
+ """把字符串半角转全角"""
304
+ rstring = ""
305
+ for uchar in ustring:
306
+ inside_code = ord(uchar)
307
+ if inside_code == 0x0020: # 除了空格其他的全角半角的公式为:半角=全角-0xfee0
308
+ inside_code = 0x3000
309
+ else:
310
+ if not (0x0020 < inside_code and inside_code <= 0x7e):
311
+ rstring += uchar
312
+ continue
313
+ inside_code += 0xfee0
314
+ rstring += chr(inside_code)
315
+ return rstring
316
+
317
+ def is_chinese(self, strings):
318
+ """
319
+ 检查整个字符串是否包含中文
320
+ :param string: 需要检查的字符串
321
+ :return: bool
322
+ """
323
+ for ch in strings:
324
+ if u'\u4e00' <= ch <= u'\u9fff':
325
+ return True
326
+ return False
327
+
328
+ def delete_char(self, strings):
329
+ """
330
+ 去除特殊字符,只保留汉子,字母、数字
331
+ :return:
332
+ """
333
+ sub_str = re.sub("([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", strings)
334
+ return sub_str
335
+
336
+ def is_sub_str(self, strs, substrs):
337
+ """
338
+ 判断substrs 是否存在strs中
339
+ strs.find(substrs)>=0
340
+ strs.index(substrs)>=0
341
+ strs.count(substrs)>=0
342
+ :param strs:
343
+ :param sbustrs:
344
+ :return:
345
+ """
346
+ return substrs in strs
347
+
348
+ def remove_escape_codes(self, text):
349
+ """
350
+ Remove ANSI escapes codes from string. It's used to remove
351
+ "colors" from log messages.
352
+ """
353
+ return ANSI_ESCAPE.sub("", text)
354
+
355
+ @classmethod
356
+ def is_num_float(cls, in_str):
357
+ """
358
+ 判定是数字或者float
359
+ :param in_str:
360
+ :return:
361
+ """
362
+ if in_str.isdigit():
363
+ return True
364
+ else:
365
+ try:
366
+ float(in_str)
367
+ return True
368
+ except:
369
+ return False
370
+
371
+ @classmethod
372
+ def ucode_str(cls, strs):
373
+ """
374
+ 一种全角转半角的解决方案
375
+ https://stackoverflow.com/questions/2422177/python-how-can-i-replace-full-width-characters-with-half-width-characters
376
+ :param strs:
377
+ :return:
378
+ """
379
+ import unicodedata
380
+ # foo = "H15"
381
+ # print(unicodedata.normalize('NFKC', foo))
382
+ return unicodedata.normalize('NFKC', strs)