ISEE小语
在网上看到梁实秋说过的一句话:
“人类最高理想,应该是人人能有闲暇,于必须的工作之余还能有闲暇去做人,有闲暇去做人的工作,去享受人的生活。”
回顾上篇
Python队列Queue的增删改查和多线程处理,简版
ISEE,公众号:ISEE小栈Python队列Queue的增删改查和多线程处理,简版
开始本篇
rstr
生成长度为10的随机数
生成长度为10的随机的数字+字母的字符串
通过指定随机字符生成指定长度的随机字符串
humanize
非常大的数字,以更友好的方式展示
未知时间戳,准确显示日期
"当天"用另一个方式展示
fuzzywuzzy
简单匹配度
模糊匹配度
dateutil
计算两个日期之间的差值
解析日志中的日期时间
jieba
精确模式分词
全模式分词
搜索引擎模式分词
pydash
提取字典中指定key的所有value
筛选出字典中所有年龄>=20的学生
指定字典的某个key对字典列表进行排序
总结
环境:
Pycharm
Python 3.9.16
生成随机字符串,这个时候,大多会想到用random,本次介绍另一个更加亲民的,名叫rstr。
rstr是一个辅助模块,用于轻松生成各种类型的随机字符串。它可以用于模糊测试、生成虚拟数据或其他应用程序。
安装:pip install rstr==3.2.1
导入:import rstr
eg:
1、生成长度为10的随机数
result = rstr.digits(10)
print(result)
# 结果:
7672918483
(左右滑动查看完整代码)
其中,rstr.digits(),如果没有指定数量,那默认是随机生成1-10个之间的数字字符串。
2、生成长度为10的随机的数字+字母的字符串
result = rstr.word(10)
print(result)
# 结果:
diqcv9Ey0a
(左右滑动查看完整代码)
其中,rstr.word(),如果没有指定数量,那默认是随机生成1-10个之间的数字+字母的字符串。
3、通过指定随机字符,生成指定长度的随机字符串
result = rstr.rstr('abc', 5)
print(result)
# 结果:
aacaa
(左右滑动查看完整代码)
结果就是永远以abc这三个字母,按长度为5随机生成。
[更多] https://pypi.org/project/rstr/
这个比较亲民,它的主要目的是更好地呈现数据和信息,比如时间戳转换为"几小时前", "昨天", "一周前"等。再比如数字,并将它们“人性化”成人类可读的短语,如“1000亿”
安装:pip install humanize==4.8.0
导入:import humanize
eg:
1、非常大的数字,以更友好的方式展示
result = humanize.intword(100000000)
print(result)
# 结果:
100.0 million
(左右滑动查看完整代码)
2、未知时间戳,准确显示日期
timestamp = 1695794106
date_time = datetime.datetime.fromtimestamp(timestamp)
result = humanize.naturalday(date_time)
print(result)
# 结果:
Sep 27
(左右滑动查看完整代码)
3、"当天"用另一个方式展示
result = humanize.naturalday(datetime.datetime.now())
print(result)
# 结果:
today
(左右滑动查看完整代码)
[更多] https://pypi.org/project/humanize/
它是一个简单易用的模糊字符串匹配工具包,它主要依据Levenshtein Distance算法来计算两个序列之间的差异。Levenshtein Distance算法又称为Edit Distance算法,是指两个字符串之间由一个转成另一个所需的最少编辑操作次数,其中包括替换一个字符、插入一个字符和删除一个字符等操作。输出是一个比率,完全匹配是100,完全不匹配是0。
安装:pip install fuzzywuzzy==0.18.0
导入:from fuzzywuzzy import fuzz
eg:
1、简单匹配度
result = fuzz.ratio("this is a test", "this is a test!")
print(result)
# 结果:
97
(左右滑动查看完整代码)
其中,也可以对中文进行对比
result = fuzz.ratio("您好,中国", "您好,和平")
print(result)
# 结果:
60
(左右滑动查看完整代码)
2、模糊匹配度
result = fuzz.partial_ratio("this is a test", "this is a test!")
print(result)
# 结果:
100
(左右滑动查看完整代码)
同上,也可以对中文进行对比
result = fuzz.partial_ratio("您好,中国", "您好,中国!")
print(result)
# 结果:
100
(左右滑动查看完整代码)
[更多] https://pypi.org/project/fuzzywuzzy/
dateutil模块提供了对Python中可用的标准datetime模块的强大扩展。它提供了许多有用的功能,以简化日期和时间的处理。
安装:pip install python-dateutil==2.8.2
导入:
from dateutil.parser import parse
from dateutil.relativedelta import relativedelta
eg:
1、计算两个日期之间的差值
from dateutil.relativedelta import relativedelta
from datetime import datetime
date1 = datetime(2023, 10, 8)
date2 = datetime(2023, 10, 10)
result = relativedelta(date1, date2).days
print(result)
# 结果:
-2
(左右滑动查看完整代码)
2、解析日志中的日期时间
from dateutil.parser import parse
log_msg = 'DEBUG 2023-10-09T14:00:01 Download is beginning..'
# log_msg = '[09/Oct/2023 14:14:14] Download is beginning.'
log_time = parse(log_msg, fuzzy=True)
print(log_time)
# 结果:
2023-10-09 14:00:01
(左右滑动查看完整代码)
其中,例子中的两种日志格式,亲测均可以
[更多] https://pypi.org/project/python-dateutil/
jieba是Python中一个非常强大的中文分词库,它可以帮助你处理中文文本,并进行分词处理。这在处理中文文本分析时非常有用。
安装:pip install jieba==0.42.1
导入:import jieba
eg:
1、精确模式分词
毋庸置疑,精确模型即将文本精确地切分开,这种方式适合文本分析
result = jieba.cut("本次进行精确模式分词!", cut_all=False)
print("结果: " + "/ ".join(result))
# 结果
结果: 本次/ 进行/ 精确/ 模式/ 分词/ !
(左右滑动查看完整代码)
2、全模式分词
把文本中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
result = jieba.cut("比如本次方案进行全模式分词!", cut_all=True)
print("全模式分词: " + "/ ".join(result))
# 结果
全模式分词: 比如/ 本次/ 次方/ 方案/ 进行/ 全/ 模式/ 分词/ !
(左右滑动查看完整代码)
注意参数cut_all,默认情况下是False,即为精确模式分词
3、搜索引擎模式
把文本在精确模式的基础上,对长词再次切分。提高召回率,适合用于搜索引擎分词
result = jieba.cut_for_search("比如本次方案进行搜索引擎模式分词!")
print("结果: " + ", ".join(result))
# 结果
结果: 比如, 本次, 方案, 进行, 搜索, 索引, 引擎, 搜索引擎, 模式, 分词, !
(左右滑动查看完整代码)
[更多] https://pypi.org/project/jieba/
它提供了许多便捷且功能强大的函数,用于处理和操作列表、字典、字符串等数据类型
安装:pip install pydash==7.0.6
导入:from pydash import *
eg:
1、提取字典中指定key的所有value
class_data = [{'Student': 'Tom', 'Age': 20}, {'Student': 'Bob', 'Age': 18}, {'Student': 'Charlie', 'Age': 21}, {'Student': 'Lily', 'Age': 19}]
# 提取年龄
age = map_(class_data, 'Age')
print(age)
# 结果
[20, 18, 21, 19]
# 提取学生姓名
student = map_(class_data, 'Student')
print(student)
# 结果
['Tom', 'Bob', 'Charlie', 'Lily']
(左右滑动查看完整代码)
2、筛选出字典中所有年龄>=20的学生
class_data = [{'Student': 'Tom', 'Age': 20}, {'Student': 'Bob', 'Age': 18}, {'Student': 'Charlie', 'Age': 21}, {'Student': 'Lily', 'Age': 19}]
students = filter_(class_data, lambda class_data: class_data['Age'] >= 20)
print(students)
# 结果
[{'Student': 'Tom', 'Age': 20}, {'Student': 'Charlie', 'Age': 21}]
(左右滑动查看完整代码)
3、指定字典的某个key对字典列表进行排序
class_data = [{'Student': 'Tom', 'Age': 20}, {'Student': 'Bob', 'Age': 18}, {'Student': 'Charlie', 'Age': 21}, {'Student': 'Lily', 'Age': 19}]
# 年龄从小到大排序
sorted_class = sort_by(class_data, 'Age')
print(sorted_class)
# 结果
[{'Student': 'Bob', 'Age': 18}, {'Student': 'Lily', 'Age': 19}, {'Student': 'Tom', 'Age': 20}, {'Student': 'Charlie', 'Age': 21}]
# 年龄从大到小排序
sorted_class = sort_by(class_data, 'Age', reverse=True)
print(sorted_class)
# 结果
[{'Student': 'Charlie', 'Age': 21}, {'Student': 'Tom', 'Age': 20}, {'Student': 'Lily', 'Age': 19}, {'Student': 'Bob', 'Age': 18}]
(左右滑动查看完整代码)
最近实际运用中所涉及到的三方库,取6个记录分享,不常见,却很好用。实现方式不是唯一的,找到适合的才是最佳的。
以上记录如有兴趣,请查阅官方资料自行研究,功能都很强大,每个介绍后面带有官方链接。
寄语:世间三美,明月,清风,眼前……
看到这儿的朋友帮点个“赞”和“在看”,谢谢支持~!
文章就分享到这儿,喜欢就点个赞吧!