re-common 2.0.0__py3-none-any.whl → 2.0.1__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/v2/baselibrary/tools/search_hash_tools.py +33 -0
- re_common/v2/baselibrary/tools/text_matcher.py +223 -0
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +2 -2
- re_common/v2/baselibrary/utils/author_smi.py +308 -0
- re_common/v2/baselibrary/utils/string_clear.py +15 -1
- re_common/v2/baselibrary/utils/stringutils.py +36 -1
- {re_common-2.0.0.dist-info → re_common-2.0.1.dist-info}/METADATA +1 -1
- re_common-2.0.1.dist-info/RECORD +25 -0
- re_common/baselibrary/__init__.py +0 -4
- re_common/baselibrary/baseabs/__init__.py +0 -7
- re_common/baselibrary/baseabs/baseabs.py +0 -26
- re_common/baselibrary/database/mbuilder.py +0 -132
- re_common/baselibrary/database/moudle.py +0 -93
- re_common/baselibrary/database/msqlite3.py +0 -194
- re_common/baselibrary/database/mysql.py +0 -169
- re_common/baselibrary/database/sql_factory.py +0 -26
- re_common/baselibrary/mthread/MThreadingRun.py +0 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -349
- re_common/baselibrary/mthread/__init__.py +0 -3
- re_common/baselibrary/mthread/mythreading.py +0 -695
- re_common/baselibrary/pakge_other/__init__.py +0 -0
- re_common/baselibrary/pakge_other/socks.py +0 -404
- re_common/baselibrary/readconfig/__init__.py +0 -0
- re_common/baselibrary/readconfig/config_factory.py +0 -18
- re_common/baselibrary/readconfig/ini_config.py +0 -317
- re_common/baselibrary/readconfig/toml_config.py +0 -49
- re_common/baselibrary/temporary/__init__.py +0 -0
- re_common/baselibrary/temporary/envdata.py +0 -36
- re_common/baselibrary/tools/__init__.py +0 -0
- re_common/baselibrary/tools/all_requests/__init__.py +0 -0
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +0 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +0 -81
- re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -31
- re_common/baselibrary/tools/contrast_db3.py +0 -123
- re_common/baselibrary/tools/copy_file.py +0 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +0 -102
- re_common/baselibrary/tools/foreachgz.py +0 -40
- re_common/baselibrary/tools/get_attr.py +0 -11
- re_common/baselibrary/tools/image_to_pdf.py +0 -62
- re_common/baselibrary/tools/java_code_deal.py +0 -139
- re_common/baselibrary/tools/javacode.py +0 -79
- re_common/baselibrary/tools/mdb_db3.py +0 -48
- re_common/baselibrary/tools/merge_file.py +0 -171
- re_common/baselibrary/tools/merge_gz_file.py +0 -165
- re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -38
- re_common/baselibrary/tools/mongo_tools.py +0 -50
- re_common/baselibrary/tools/move_file.py +0 -170
- re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +0 -93
- re_common/baselibrary/tools/mpandas/__init__.py +0 -0
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -8
- re_common/baselibrary/tools/myparsel.py +0 -104
- re_common/baselibrary/tools/rename_dir_file.py +0 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +0 -398
- re_common/baselibrary/tools/split_line_to_many.py +0 -25
- re_common/baselibrary/tools/stringtodicts.py +0 -33
- re_common/baselibrary/tools/workwechant_bot.py +0 -84
- re_common/baselibrary/utils/__init__.py +0 -0
- re_common/baselibrary/utils/baseaiohttp.py +0 -296
- re_common/baselibrary/utils/baseaiomysql.py +0 -87
- re_common/baselibrary/utils/baseallstep.py +0 -191
- re_common/baselibrary/utils/baseavro.py +0 -19
- re_common/baselibrary/utils/baseboto3.py +0 -291
- re_common/baselibrary/utils/basecsv.py +0 -32
- re_common/baselibrary/utils/basedict.py +0 -133
- re_common/baselibrary/utils/basedir.py +0 -241
- re_common/baselibrary/utils/baseencode.py +0 -351
- re_common/baselibrary/utils/baseencoding.py +0 -29
- re_common/baselibrary/utils/baseesdsl.py +0 -86
- re_common/baselibrary/utils/baseexcel.py +0 -264
- re_common/baselibrary/utils/baseexcept.py +0 -109
- re_common/baselibrary/utils/basefile.py +0 -654
- re_common/baselibrary/utils/baseftp.py +0 -214
- re_common/baselibrary/utils/basegzip.py +0 -60
- re_common/baselibrary/utils/basehdfs.py +0 -135
- re_common/baselibrary/utils/basehttpx.py +0 -268
- re_common/baselibrary/utils/baseip.py +0 -87
- re_common/baselibrary/utils/basejson.py +0 -2
- re_common/baselibrary/utils/baselist.py +0 -32
- re_common/baselibrary/utils/basemotor.py +0 -190
- re_common/baselibrary/utils/basemssql.py +0 -98
- re_common/baselibrary/utils/baseodbc.py +0 -113
- re_common/baselibrary/utils/basepandas.py +0 -302
- re_common/baselibrary/utils/basepeewee.py +0 -11
- re_common/baselibrary/utils/basepika.py +0 -180
- re_common/baselibrary/utils/basepydash.py +0 -143
- re_common/baselibrary/utils/basepymongo.py +0 -230
- re_common/baselibrary/utils/basequeue.py +0 -22
- re_common/baselibrary/utils/baserar.py +0 -57
- re_common/baselibrary/utils/baserequest.py +0 -279
- re_common/baselibrary/utils/baseset.py +0 -8
- re_common/baselibrary/utils/basesmb.py +0 -403
- re_common/baselibrary/utils/basestring.py +0 -382
- re_common/baselibrary/utils/basetime.py +0 -320
- re_common/baselibrary/utils/basetuple.py +0 -0
- re_common/baselibrary/utils/baseurl.py +0 -121
- re_common/baselibrary/utils/basezip.py +0 -57
- re_common/baselibrary/utils/core/__init__.py +0 -8
- re_common/baselibrary/utils/core/bottomutils.py +0 -18
- re_common/baselibrary/utils/core/mdeprecated.py +0 -327
- re_common/baselibrary/utils/core/mlamada.py +0 -16
- re_common/baselibrary/utils/core/msginfo.py +0 -25
- re_common/baselibrary/utils/core/requests_core.py +0 -103
- re_common/baselibrary/utils/fateadm.py +0 -429
- re_common/baselibrary/utils/importfun.py +0 -123
- re_common/baselibrary/utils/mfaker.py +0 -57
- re_common/baselibrary/utils/my_abc/__init__.py +0 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +0 -32
- re_common/baselibrary/utils/mylogger.py +0 -414
- re_common/baselibrary/utils/myredisclient.py +0 -861
- re_common/baselibrary/utils/pipupgrade.py +0 -21
- re_common/baselibrary/utils/ringlist.py +0 -85
- re_common/baselibrary/utils/version_compare.py +0 -36
- re_common/baselibrary/utils/ydmhttp.py +0 -126
- re_common/facade/__init__.py +0 -1
- re_common/facade/lazy_import.py +0 -11
- re_common/facade/loggerfacade.py +0 -25
- re_common/facade/mysqlfacade.py +0 -467
- re_common/facade/now.py +0 -31
- re_common/facade/sqlite3facade.py +0 -257
- re_common/facade/use/__init__.py +0 -0
- re_common/facade/use/mq_use_facade.py +0 -83
- re_common/facade/use/proxy_use_facade.py +0 -20
- re_common/libtest/__init__.py +0 -0
- re_common/libtest/base_dict_test.py +0 -19
- re_common/libtest/baseavro_test.py +0 -13
- re_common/libtest/basefile_test.py +0 -14
- re_common/libtest/basemssql_test.py +0 -77
- re_common/libtest/baseodbc_test.py +0 -8
- re_common/libtest/basepandas_test.py +0 -38
- re_common/libtest/get_attr_test/__init__.py +0 -0
- re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -14
- re_common/libtest/get_attr_test/settings.py +0 -55
- re_common/libtest/idencode_test.py +0 -54
- re_common/libtest/iniconfig_test.py +0 -35
- re_common/libtest/ip_test.py +0 -35
- re_common/libtest/merge_file_test.py +0 -20
- re_common/libtest/mfaker_test.py +0 -9
- re_common/libtest/mm3_test.py +0 -32
- re_common/libtest/mylogger_test.py +0 -89
- re_common/libtest/myparsel_test.py +0 -28
- re_common/libtest/mysql_test.py +0 -151
- re_common/libtest/pymongo_test.py +0 -21
- re_common/libtest/split_test.py +0 -12
- re_common/libtest/sqlite3_merge_test.py +0 -6
- re_common/libtest/sqlite3_test.py +0 -34
- re_common/libtest/tomlconfig_test.py +0 -30
- re_common/libtest/use_tools_test/__init__.py +0 -3
- re_common/libtest/user/__init__.py +0 -5
- re_common/studio/__init__.py +0 -5
- re_common/studio/assignment_expressions.py +0 -37
- re_common/studio/mydash/__init__.py +0 -0
- re_common/studio/mydash/test1.py +0 -19
- re_common/studio/pydashstudio/__init__.py +0 -0
- re_common/studio/pydashstudio/first.py +0 -9
- re_common/studio/streamlitstudio/__init__.py +0 -0
- re_common/studio/streamlitstudio/first_app.py +0 -66
- re_common/studio/streamlitstudio/uber_pickups.py +0 -24
- re_common/studio/test.py +0 -19
- re_common/vip/__init__.py +0 -0
- re_common/vip/base_step_process.py +0 -11
- re_common/vip/baseencodeid.py +0 -91
- re_common/vip/changetaskname.py +0 -28
- re_common/vip/core_var.py +0 -24
- re_common/vip/mmh3Hash.py +0 -90
- re_common/vip/proxy/__init__.py +0 -0
- re_common/vip/proxy/allproxys.py +0 -127
- re_common/vip/proxy/allproxys_thread.py +0 -159
- re_common/vip/proxy/cnki_proxy.py +0 -153
- re_common/vip/proxy/kuaidaili.py +0 -87
- re_common/vip/proxy/proxy_all.py +0 -113
- re_common/vip/proxy/update_kuaidaili_0.py +0 -42
- re_common/vip/proxy/wanfang_proxy.py +0 -152
- re_common/vip/proxy/wp_proxy_all.py +0 -182
- re_common/vip/read_rawid_to_txt.py +0 -92
- re_common/vip/title/__init__.py +0 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +0 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -196
- re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -135
- re_common/vip/title/transform/__init__.py +0 -11
- re_common-2.0.0.dist-info/RECORD +0 -209
- /re_common/{baselibrary/database/__init__.py → v2/baselibrary/tools/list_tools.py} +0 -0
- {re_common-2.0.0.dist-info → re_common-2.0.1.dist-info}/LICENSE +0 -0
- {re_common-2.0.0.dist-info → re_common-2.0.1.dist-info}/WHEEL +0 -0
- {re_common-2.0.0.dist-info → re_common-2.0.1.dist-info}/top_level.txt +0 -0
|
@@ -1,382 +0,0 @@
|
|
|
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,320 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
import time
|
|
3
|
-
from calendar import monthrange, Calendar
|
|
4
|
-
# timedalte 是datetime中的一个对象,该对象表示两个时间的差值
|
|
5
|
-
from datetime import timedelta
|
|
6
|
-
|
|
7
|
-
# microseconds (毫秒) 1 second = 1000 milliseconds
|
|
8
|
-
# milliseconds (微秒) 1 milliseconds = 1000 milliseconds
|
|
9
|
-
"""
|
|
10
|
-
%Y 完整的年份
|
|
11
|
-
%m 月份(01 - 12)
|
|
12
|
-
%d 一个月中的第几天(01 - 31)
|
|
13
|
-
%H 一天中的第几个小时(24小时制,00 - 23)
|
|
14
|
-
%M 分钟数(00 - 59)
|
|
15
|
-
%S 秒(01 - 61)
|
|
16
|
-
%X 本地相应时间
|
|
17
|
-
%x 本地相应日期
|
|
18
|
-
%a 本地(locale)简化星期名称
|
|
19
|
-
%A 本地完整星期名称
|
|
20
|
-
%b 本地简化月份名称
|
|
21
|
-
%B 本地完整月份名称
|
|
22
|
-
%c 本地相应的日期和时间表示
|
|
23
|
-
%I 第几个小时(12小时制,01 - 12)
|
|
24
|
-
%j 一年中的第几天(001 - 366)
|
|
25
|
-
%p 本地am或者pm的相应符
|
|
26
|
-
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)
|
|
27
|
-
%w 一个星期中的第几天(0 - 6,0是星期天)
|
|
28
|
-
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始
|
|
29
|
-
%y 去掉世纪的年份(00 - 99)
|
|
30
|
-
%Z 时区的名字(如果不存在为空字符)
|
|
31
|
-
%% ‘%’字符
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
class BaseTime(object):
|
|
35
|
-
|
|
36
|
-
def __init__(self):
|
|
37
|
-
self.mcal = MCalendar()
|
|
38
|
-
|
|
39
|
-
def str_to_timestamp(self, time_str, time_format="%Y-%m-%d %H:%M:%S.%f"):
|
|
40
|
-
"""
|
|
41
|
-
将字符串转换为时间戳
|
|
42
|
-
:param time_str:
|
|
43
|
-
:return:
|
|
44
|
-
"""
|
|
45
|
-
timeArray = time.strptime(time_str, time_format)
|
|
46
|
-
timeStamp = int(time.mktime(timeArray))
|
|
47
|
-
return timeStamp
|
|
48
|
-
|
|
49
|
-
def date_format(self, datestring, sourceformat='%b %d, %Y', tarformat="%Y%m%d"):
|
|
50
|
-
"""
|
|
51
|
-
特定字符串转时间 转 string
|
|
52
|
-
MAY 24, 2017 ==》 20170524
|
|
53
|
-
:param datestring: 时间字符串
|
|
54
|
-
:param sourceformat: 源格式 源格式需要与传入的字符串格式一致
|
|
55
|
-
:param tarformat: 目标格式
|
|
56
|
-
:return: 一个目标格式的string
|
|
57
|
-
"""
|
|
58
|
-
"""
|
|
59
|
-
MAY 24, 2017 ==》 20170524
|
|
60
|
-
:param datestring:
|
|
61
|
-
:return:
|
|
62
|
-
"""
|
|
63
|
-
return datetime.datetime.strftime(datetime.datetime.strptime(datestring, sourceformat), tarformat)
|
|
64
|
-
|
|
65
|
-
def get_now_datetime(self):
|
|
66
|
-
"""
|
|
67
|
-
获取现在的时间
|
|
68
|
-
:return: {
|
|
69
|
-
type: datetime.datetime
|
|
70
|
-
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
71
|
-
print Strings: 2019-01-28 17:15:47.671929
|
|
72
|
-
}
|
|
73
|
-
"""
|
|
74
|
-
return datetime.datetime.now()
|
|
75
|
-
|
|
76
|
-
def string_to_datetime(self, str, format="%Y-%m-%d %H:%M:%S.%f") -> datetime.datetime:
|
|
77
|
-
"""
|
|
78
|
-
string 转 datetime
|
|
79
|
-
:param str: 2017-01-01 11:10:45.1234
|
|
80
|
-
:param format: 格式 必须和str的格式相对相应
|
|
81
|
-
:return:{
|
|
82
|
-
type: datetime.datetime
|
|
83
|
-
cmd python: datetime.datetime(2019, 1, 28, 17, 19, 5, 614144)
|
|
84
|
-
print Strings: 2019-01-28 17:15:47.671929
|
|
85
|
-
}
|
|
86
|
-
"""
|
|
87
|
-
return datetime.datetime.strptime(str, format)
|
|
88
|
-
|
|
89
|
-
def datetime_to_string(self, date, format="%Y.%m.%d"):
|
|
90
|
-
"""
|
|
91
|
-
:param date: 输入类型 datetime.datetime
|
|
92
|
-
:return: 2017.06.01
|
|
93
|
-
"""
|
|
94
|
-
return date.strftime(format)
|
|
95
|
-
|
|
96
|
-
def date_to_datetime(self, date):
|
|
97
|
-
"""
|
|
98
|
-
由于datetime与date不能直接比较 所以需要转换一下
|
|
99
|
-
:return:
|
|
100
|
-
"""
|
|
101
|
-
return datetime.datetime.combine(date, datetime.datetime.min.time())
|
|
102
|
-
|
|
103
|
-
def get_diff(self, datetime):
|
|
104
|
-
"""
|
|
105
|
-
传入一个时间标准的str 求差秒
|
|
106
|
-
:param datetime: {type: datetime.datetime}
|
|
107
|
-
:return: string 秒
|
|
108
|
-
"""
|
|
109
|
-
return (self.get_now_datetime() - self.string_to_datetime(datetime)).seconds
|
|
110
|
-
|
|
111
|
-
def get_time(self):
|
|
112
|
-
"""
|
|
113
|
-
返回当前时间的时间戳
|
|
114
|
-
1546914500.7278442
|
|
115
|
-
:return:
|
|
116
|
-
"""
|
|
117
|
-
return time.time()
|
|
118
|
-
|
|
119
|
-
def get_weeks_after(self, mdatetime, weeks):
|
|
120
|
-
"""
|
|
121
|
-
周
|
|
122
|
-
:param days:
|
|
123
|
-
:return: datetime
|
|
124
|
-
"""
|
|
125
|
-
return mdatetime + datetime.timedelta(weeks=weeks)
|
|
126
|
-
|
|
127
|
-
def get_weeks_before(self, mdatetime, weeks):
|
|
128
|
-
"""
|
|
129
|
-
周
|
|
130
|
-
:param days:
|
|
131
|
-
:return: datetime
|
|
132
|
-
"""
|
|
133
|
-
return mdatetime - datetime.timedelta(weeks=weeks)
|
|
134
|
-
|
|
135
|
-
def get_day_after(self, mdatetime, days):
|
|
136
|
-
"""
|
|
137
|
-
获取几天前的时间 并获取strings 可指定时间格式
|
|
138
|
-
:param days:
|
|
139
|
-
:return: datetime
|
|
140
|
-
"""
|
|
141
|
-
return mdatetime + datetime.timedelta(days=days)
|
|
142
|
-
|
|
143
|
-
def get_day_before(self, mdatetime, days):
|
|
144
|
-
"""
|
|
145
|
-
获取几天前的时间 并获取strings 可指定时间格式
|
|
146
|
-
:param days:
|
|
147
|
-
:return: datetime
|
|
148
|
-
"""
|
|
149
|
-
return mdatetime - datetime.timedelta(days=days)
|
|
150
|
-
|
|
151
|
-
def get_hours_after(self, mdatetime, hours):
|
|
152
|
-
"""
|
|
153
|
-
小时
|
|
154
|
-
:param days:
|
|
155
|
-
:return: datetime
|
|
156
|
-
"""
|
|
157
|
-
return mdatetime + datetime.timedelta(hours=hours)
|
|
158
|
-
|
|
159
|
-
def get_hours_before(self, mdatetime, hours):
|
|
160
|
-
"""
|
|
161
|
-
小时
|
|
162
|
-
:param days:
|
|
163
|
-
:return: datetime
|
|
164
|
-
"""
|
|
165
|
-
return mdatetime - datetime.timedelta(hours=hours)
|
|
166
|
-
|
|
167
|
-
def get_minutes_after(self, mdatetime, minutes):
|
|
168
|
-
"""
|
|
169
|
-
分
|
|
170
|
-
:param mdatetime: datetime
|
|
171
|
-
:param minutes: float
|
|
172
|
-
:return: datetime
|
|
173
|
-
"""
|
|
174
|
-
return mdatetime + datetime.timedelta(minutes=minutes)
|
|
175
|
-
|
|
176
|
-
def get_minutes_before(self, mdatetime, minutes):
|
|
177
|
-
"""
|
|
178
|
-
分
|
|
179
|
-
:param days:
|
|
180
|
-
:return: datetime
|
|
181
|
-
"""
|
|
182
|
-
return mdatetime - datetime.timedelta(minutes=minutes)
|
|
183
|
-
|
|
184
|
-
def get_seconds_after(self, mdatetime, seconds):
|
|
185
|
-
"""
|
|
186
|
-
秒
|
|
187
|
-
:param days:
|
|
188
|
-
:return: datetime
|
|
189
|
-
"""
|
|
190
|
-
return mdatetime + datetime.timedelta(seconds=seconds)
|
|
191
|
-
|
|
192
|
-
def get_seconds_before(self, mdatetime, seconds):
|
|
193
|
-
"""
|
|
194
|
-
秒
|
|
195
|
-
:param days:
|
|
196
|
-
:return: datetime
|
|
197
|
-
"""
|
|
198
|
-
return mdatetime - datetime.timedelta(seconds=seconds)
|
|
199
|
-
|
|
200
|
-
def get_milliseconds_after(self, mdatetime, milliseconds):
|
|
201
|
-
"""
|
|
202
|
-
毫秒
|
|
203
|
-
:param days:
|
|
204
|
-
:return: datetime
|
|
205
|
-
"""
|
|
206
|
-
return mdatetime + datetime.timedelta(milliseconds=milliseconds)
|
|
207
|
-
|
|
208
|
-
def get_milliseconds_before(self, mdatetime, milliseconds):
|
|
209
|
-
"""
|
|
210
|
-
毫秒
|
|
211
|
-
:param days:
|
|
212
|
-
:return: datetime
|
|
213
|
-
"""
|
|
214
|
-
return mdatetime - datetime.timedelta(milliseconds=milliseconds)
|
|
215
|
-
|
|
216
|
-
def get_microseconds_after(self, mdatetime, microseconds):
|
|
217
|
-
"""
|
|
218
|
-
微秒
|
|
219
|
-
:param days:
|
|
220
|
-
:return: datetime
|
|
221
|
-
"""
|
|
222
|
-
return mdatetime + datetime.timedelta(microseconds=microseconds)
|
|
223
|
-
|
|
224
|
-
def get_microseconds_before(self, mdatetime, microseconds):
|
|
225
|
-
"""
|
|
226
|
-
微秒
|
|
227
|
-
:param days:
|
|
228
|
-
:return: datetime
|
|
229
|
-
"""
|
|
230
|
-
return mdatetime - datetime.timedelta(microseconds=microseconds)
|
|
231
|
-
|
|
232
|
-
def get_next_month(self, mdatetime, day=1):
|
|
233
|
-
"""
|
|
234
|
-
获取下一月某一天
|
|
235
|
-
:param datestring: 输入格式 20170524
|
|
236
|
-
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
237
|
-
"""
|
|
238
|
-
return (mdatetime.replace(day=1) + datetime.timedelta(33)).replace(day=day)
|
|
239
|
-
|
|
240
|
-
def get_befor_month(self, mdatetime, day=1):
|
|
241
|
-
"""
|
|
242
|
-
获取前一月的某一天
|
|
243
|
-
:param datestring: 输入格式 20170524
|
|
244
|
-
:return: 返回类型 datetime.datetime 格式 2019-01-01 00:00:00
|
|
245
|
-
"""
|
|
246
|
-
return (mdatetime.replace(day=1) - datetime.timedelta(10)).replace(day=day)
|
|
247
|
-
|
|
248
|
-
def get_today_date_strings(self):
|
|
249
|
-
"""
|
|
250
|
-
获取当前日期级时间字符串
|
|
251
|
-
如 20180810
|
|
252
|
-
:return: string
|
|
253
|
-
"""
|
|
254
|
-
return self.datetime_to_string(self.get_now_datetime(), '%Y%m%d')
|
|
255
|
-
|
|
256
|
-
def get_beijin_date_strins(self, format="%Y%m%d%H%M%S"):
|
|
257
|
-
"""
|
|
258
|
-
获取北京时间string
|
|
259
|
-
:return:
|
|
260
|
-
"""
|
|
261
|
-
update_time = self.datetime_to_string(
|
|
262
|
-
datetime.datetime.utcnow() + datetime.timedelta(hours=8), format)
|
|
263
|
-
return update_time
|
|
264
|
-
|
|
265
|
-
def get_moths_day(self):
|
|
266
|
-
pass
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
class MCalendar(object):
|
|
270
|
-
def __init__(self):
|
|
271
|
-
self.c = Calendar()
|
|
272
|
-
|
|
273
|
-
def monthrange(self, year: int, moths: int):
|
|
274
|
-
"""
|
|
275
|
-
获取一个月的迭代
|
|
276
|
-
:return: tuple (0,31)
|
|
277
|
-
"""
|
|
278
|
-
return monthrange(year, moths)
|
|
279
|
-
|
|
280
|
-
def itermonthdates(self, year: int, moths: int):
|
|
281
|
-
"""
|
|
282
|
-
可以迭代某個月,但前后会有其他月份的日期
|
|
283
|
-
:param year:
|
|
284
|
-
:param moths:
|
|
285
|
-
:return: generator object Calendar.itermonthdates 返回一個生成器
|
|
286
|
-
"""
|
|
287
|
-
return self.c.itermonthdates(year, moths)
|
|
288
|
-
|
|
289
|
-
def date_iter(self, year, month):
|
|
290
|
-
"""
|
|
291
|
-
返回某个月的所有天
|
|
292
|
-
for d in date_iter(2019, 12):
|
|
293
|
-
print(d)
|
|
294
|
-
:param year:
|
|
295
|
-
:param month:
|
|
296
|
-
:return:
|
|
297
|
-
"""
|
|
298
|
-
for i in range(1, monthrange(year, month)[1] + 1):
|
|
299
|
-
yield datetime.date(year, month, i)
|
|
300
|
-
|
|
301
|
-
def get_days(self, startdays: str, enddays: str):
|
|
302
|
-
"""
|
|
303
|
-
返回开始到结束的所有天
|
|
304
|
-
:param startdays: 20180101
|
|
305
|
-
:param enddays: 20190101
|
|
306
|
-
:return:
|
|
307
|
-
"""
|
|
308
|
-
start_year = startdays[:4]
|
|
309
|
-
start_month = startdays[4:6]
|
|
310
|
-
start_days = startdays[6:]
|
|
311
|
-
end_year = enddays[:4]
|
|
312
|
-
end_month = enddays[4:6]
|
|
313
|
-
end_days = enddays[6:]
|
|
314
|
-
|
|
315
|
-
for year in range(int(start_year), int(end_year) + 1):
|
|
316
|
-
for month in range(int(start_month), 13):
|
|
317
|
-
start_month = 1
|
|
318
|
-
for days in self.date_iter(int(year), int(month)):
|
|
319
|
-
if startdays <= str(days).replace("-", "") <= enddays:
|
|
320
|
-
yield days
|
|
File without changes
|