python中不常见却强大并好用的6个三方库,精简版

文摘   科技   2023-10-11 19:26   北京  


ISEE小语


在网上看到梁实秋说过的一句话:

“人类最高理想,应该是人人能有闲暇,于必须的工作之余还能有闲暇去做人,有闲暇去做人的工作,去享受人的生活。”




回顾上篇



Python队列Queue的增删改查和多线程处理,简版

ISEE,公众号:ISEE小栈Python队列Queue的增删改查和多线程处理,简版


开始本篇



  1.  rstr

    1. 生成长度为10的随机数

    2. 生成长度为10的随机的数字+字母的字符串

    3. 通过指定随机字符生成指定长度的随机字符串

  2. humanize

    1. 非常大的数字,以更友好的方式展示

    2. 未知时间戳,准确显示日期

    3. "当天"用另一个方式展示

  3. fuzzywuzzy

    1. 简单匹配度

    2. 模糊匹配度

  4. dateutil

    1. 计算两个日期之间的差值

    2. 解析日志中的日期时间

  5. jieba

    1. 精确模式分词

    2. 全模式分词

    3. 搜索引擎模式分词

  6. pydash

    1. 提取字典中指定key的所有value

    2. 筛选出字典中所有年龄>=20的学生

    3. 指定字典的某个key对字典列表进行排序

  7. 总结




环境:

Pycharm

Python 3.9.16




rstr


生成随机字符串,这个时候,大多会想到用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/



humanize


这个比较亲民,它的主要目的是更好地呈现数据和信息,比如时间戳转换为"几小时前", "昨天", "一周前"等。再比如数字,并将它们“人性化”成人类可读的短语,如“1000亿”

安装:pip install humanize==4.8.0

导入:import humanize

eg:

1、非常大的数字,以更友好的方式展示

result = humanize.intword(100000000)print(result)
# 结果:100.0 million

(左右滑动查看完整代码)


2、未知时间戳,准确显示日期

timestamp = 1695794106date_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/




fuzzywuzzy


它是一个简单易用的模糊字符串匹配工具包,它主要依据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


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 relativedeltafrom 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


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/




pydash


它提供了许多便捷且功能强大的函数,用于处理和操作列表、字典、字符串等数据类型

安装: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个记录分享,不常见,却很好用。实现方式不是唯一的,找到适合的才是最佳的。

以上记录如有兴趣,请查阅官方资料自行研究,功能都很强大,每个介绍后面带有官方链接。



寄语:世间三美,明月,清风,眼前……



看到这儿的朋友帮点个“”和“在看”,谢谢支持~!

     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转

ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章