re-common 10.0.39__py3-none-any.whl → 10.0.41__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.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +235 -220
- re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
- re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
- re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
- re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
- re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/concurrency.py +35 -35
- re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
- re_common/v2/baselibrary/tools/data_processer/data_processer.py +497 -508
- re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
- re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
- re_common/v2/baselibrary/tools/dict_tools.py +44 -44
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
- re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
- re_common/v2/baselibrary/tools/list_tools.py +69 -69
- re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/tree_processor/__init__.py +0 -0
- re_common/v2/baselibrary/tools/tree_processor/builder.py +25 -0
- re_common/v2/baselibrary/tools/tree_processor/node.py +13 -0
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
- re_common/v2/baselibrary/utils/author_smi.py +361 -361
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +163 -163
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +94 -77
- re_common/v2/baselibrary/utils/db.py +174 -156
- re_common/v2/baselibrary/utils/elasticsearch.py +46 -0
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +187 -186
- re_common/v2/baselibrary/utils/string_clear.py +246 -246
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +312 -271
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/LICENSE +201 -201
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/METADATA +16 -16
- re_common-10.0.41.dist-info/RECORD +252 -0
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/WHEEL +1 -1
- re_common-10.0.39.dist-info/RECORD +0 -248
- {re_common-10.0.39.dist-info → re_common-10.0.41.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)
|