大家好,本文将围绕python速查手册pdf百度网盘展开说明,python速查手册基础卷pdf是一个很多人都想弄明白的事情,想搞清楚21张python速查表需要先了解以下几个事情。
文章目录
- 1. 运算符
- 2. Python 3 基础语法
- 3. Python 3 对象:字符串、列表、元组、集合、字典
- 4. 条件和循环
- 5. 对Python 3 对象的处理:排序、过滤、迭代、删除,查看属性
- 6. 函数入参
- 6. Python 3 内置函数
- 7. 异常捕获:try-except语句
- 8. 与终端的输入输出互动
- 9. 上下文管理器
- 10. 装饰器
- 11. 常见简单bug(比较复杂的有些我会专门写一篇博文)
- 12. jupyter notebook
- 13. colab教程
- 14. 其他常用功能库
-
- 1. yaml
- 2. 进度条
- 3. random库:生成伪随机数
- 4. copy库:复制对象
- 5. math库
- 6. statistics库:数学统计函数
- 7. SymPy库:科学计算
- 8. warnings库
- 9. 发邮件
- 10. 压缩与解压缩文件:zipfile库
- 12. shutil库:高阶文件操作
- 12. cn2an库:在汉字与阿拉伯数字之间进行转换
- 13. webssh
- 14. pipx:包管理工具(可以在隔离环境下安装包)
- 15. chardet:检测bytes或bytearray的编码方式
- 16. 检测字符串的语种
- 17. 从文本中抽取URL(超文本链接/网址)
- 18. urllib
- 19. [secrets --- 生成管理密码的安全随机数 — Python 3.11.3 文档](https://docs.python.org/zh-cn/3/library/secrets.html)
- 20. 背景任务调度
- 21. base64
- 22. html库
- 23. ftfy库:修复字符编码bug
- 24. JioNLP包
- 25. difflib:比较序列
- 26. signal包
- 15. 实现其他小功能
- 16. 本文撰写过程中参考的其他资料
1. 运算符
+
-
*
/
- " / “就表示 浮点数除法,返回浮点结果;” // "表示整数除法。
- 取余
%
指数**
- 等式:
=
==
>
<
>=
<=
- 不等于:
!=
或<>
或not
- 交并:
and
&
VS.or
|
- 所有的二元数学操作符(+、-、*、/、//、%、**)都有与之对应的增强赋值操作符(+=、-=、*=、/=、//=、%=、**=)
2. Python 3 基础语法
- 在Python中,可以同时给多个变量赋值:<变量1>, …, <变量N> = <表达式1>, …, <表达式N>
- 长语句跨行可在第一行末尾加入
\\
- 判断是否是None:
is not None
!=None
- 匿名函数:
<函数名> = lambda <参数列表>: <表达式>
pass
:在需要缩进的部分不写代码(一般都是测试时候不需要跑了),就写个pass
顶一下位置python turtle画简单树。啥也不干- 注释以
#
开头 assert
:断言
用于判断一个表达式,在表达式条件为 false 的时候触发异常。global
- 3.10的新功能:
match ... case
看起来就跟Java里面的switch ... case
差不多。我说真的这些编程语言是越来越像了啊
3. Python 3 对象:字符串、列表、元组、集合、字典
- 字符串、列表、元组相关内容请参考我写的这篇博文:Python3序列类型(字符串、列表、元组)
- 集合
set()
:初始化集合对象add(obj)
:增加单个元素update(series)
:将整个序列的所有元素一一增加进集合set.intersection(set1, set2 ... etc)
:返回入参集合的交集- {}会创造一个空字典
universitySet = set(['西南财大', '电子科技大学', '四川大学', '西南交通大学'])
universitySet = {'西南财大', '电子科技大学', '四川大学', '西南交通大学'}
- 集合是无序组合,它没有索引和位置的概念,不能分片。
操作符 | 描述 |
---|---|
S – T 或 S.difference(T) | 返回一个新集合,包括在集合S中但不在集合T中的元素 |
S-=T或S.difference_update(T) | 更新集合S,包括在集合S中但不在集合T中的元素 |
S & T或S.intersection(T) | 返回一个新集合,包括同时在集合S和T中的元素 |
S&=T或S.intersection_update(T) | 更新集合S,包括同时在集合S和T中的元素。 |
S^T或s.symmetric_difference(T) | 返回一个新集合,包括集合S和T中元素,但不包括同时在其中的元素 |
S=^T或s.symmetric_difference_update(T) | 更新集合S,包括集合S和T中元素,但不包括同时在其中的元素 |
S|T或S.union(T) | 返回一个新集合,包括集合S和T中所有元素 |
S=|T或S.update(T) | 更新集合S,包括集合S和T中所有元素 |
S<=T或S.issubset(T) | 如果S与T相同或S是T的子集,返回True,否则返回False,可以用S<T判断S是否是T的真子集 |
S>=T或S.issuperset(T) | 如果S与T相同或S是T的超集,返回True,否则返回False,可以用S>T判断S是否是T的真超集 |
函数或方法 | 描述 |
---|---|
S.add(x) | 如果数据项x不在集合S中,将x增加到s |
S.clear() | 移除S中所有数据项 |
S.copy() | 返回集合S的一个拷贝 |
S.pop() | 随机返回集合S中的一个元素,如果S为空,产生KeyError异常 |
S.discard(x) | 如果x在集合S中,移除该元素;如果x不在,不报错 |
S.remove(x) | 如果x在集合S中,移除该元素;不在产生KeyError异常 |
S.isdisjoint(T) | 如果集合S与T没有相同元素,返回True |
len(S) | 返回集合S元素个数 |
x in S | 如果x是S的元素,返回True,否则返回False |
x not in S | 如果x不是S的元素,返回True,否则返回False |
-
字典
- 字典的键需要是不变的变量(可以是字符串,数字)
- 键:
keys()
值:values()
返回的是一个可迭代的对象,是一个视图对象,是只读的 - 增加一个键值对:直接使
dict_object[k]=v
update(dict_object)
:将入参字典的键值对更新到原对象中
(如果键再原对象中就存在,将更新值;如果不存在,将键值对加入原对象)- 字典生成式,示例:
{i:str(i) for i in range(10)}
{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}
- 键可以是Python中任意的不可变类型:布尔型、整型、浮点型、元组、字符串,以及其他一些不可变的类型。字典本身是可变的,因此可以增加、删除或修改其中的键值对。字典的键必须保证互不相同。
- 字典是集合类型的延续,各个元素并没有顺序之分。
<值> = <字典变量>[<键>]
- 添加键值对:直接添加
del employee['性别']
函数和方法 描述 <d>.keys()
返回所有的键信息 <d>.values()
返回所有的值信息 <d>.items()
返回所有的键值对 <d>.get(<key>,<default>)
键存在则返回相应值,否则返回默认值 <d>.pop(<key>,<default>)
键存在则返回相应值,同时删除键值对,否则返回默认值 <d>.popitem()
随机从字典中取出一个键值对,以元组(key, value)形式返回 <d>.clear()
删除所有的键值对 del <d>[<key>]
删除字典中某一个键值对 键/值/元组 in <d>
setdault()
<d1>.update(<d2>)
pprint()
或pformat()
<d>.setdefault(key,get_value(key))
获取值,如果不存在,计算并存储
参考资料:字典及其内置函数
4. 条件和循环
- if判断语句
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
- while
break
:结束循环continue
:跳过本轮循环,直接进入下一轮循环
while 判断条件(condition): 执行语句(statements)……
while <expr>: <statement(s)> else: <additional_statement(s)>
- for循环语句:匿名变量可以用
_
指代for <variable> in <sequence>: <statements> else: <statements>
5. 对Python 3 对象的处理:排序、过滤、迭代、删除,查看属性
- 排序
sorted()
:返回对象元素排序后的结果sort()
:对对象进行排序,返回None
filter(function,iterable)
1:过滤- 示例:
list(filter(None,[None,'1111111','2222222']))
:将列表中的空对象删掉,返回['1111111', '2222222']
- 示例:
- 同时迭代多个迭代器,按顺序同时输出多个迭代器里的元素:用
zip()
2
举例:L1=['a','b','c','d','e','f','g','h'] L2=['A','B','C','D','E','F','G','H'] for (l1,l2) in zip(L1,L2): print(l1+' '+l2)
len(object)
:返回对象的长度- 对象的所有属性:
object.__dict__
(返回一个字典) - 检查对象是否具有某一属性:
object.hasattr()
id()
all(iterable_object)
:判断所有元素是否都为 TRUE,如果是返回 True,否则返回 False。3any()
del
6. 函数入参
位置参数,关键字参数,指定默认参数值
使用*收集位置参数,使用**收集关键字参数(星号本身不是参数)4
列表、元组前面加星号作用是将列表解开成两个独立的参数,传入函数,字典前面加两个星号,是将字典解开成独立的元素作为形参
举例:
def add(a, b):
return a+b
data = [4,3]
print (add(*data)) #输出7
data = {'a' : 4, 'b' : 3}
print (add(**data)) #输出7
print (add(*data)) #输出'ab'
6. Python 3 内置函数
round(浮点数,保留小数点后的位数)
:返回数字舍入后的结果eval(str)
:执行字符串格式的表达式,并返回表达式结果range(obj:int)
:返回以0为第一个元素、以obj-1
为最后一个元素的迭代器
参数:开始值,末值,步长enumerate(sequence,[start=0])
:返回enumerate(枚举)对象,每个元素是一个元组(第一个元素是索引,第二个元素是sequence中对应的元素)5iter(object)
:返回迭代器map(function,iterable,...)
:对指定序列做映射,将结果返回
代码:list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))
输出:[1, 4, 9, 16, 25]
ord()
:以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值。6chr()
:用一个整数作参数,返回一个对应的字符。7- 直接转换对象类型:如
- 数字类型转换函数:
float(x)
int(x)
str(x)
list(x)
str(x)
- 数字类型转换函数:
- 退出程序运行(仅在脚本运行时起效,在Jupyter Notebook中无效):
exit()
- 输出对象类型:
type(obj)
7. 异常捕获:try-except语句
else,finally保留字
except Exception as e
- 异常:
raise Exception(message:str)
Exception可以替换成其他Exception子类 - Exception子类:
- ValueException
8. 与终端的输入输出互动
1. 打印/输出
print(打印内容)
会自动在末尾添加换行符
如果打印后不想换行,可以使用参数end
- 打印颜色:
"\033[31m本段文字将会显示成红色\033[0m\n"
更多使用方法可参考此篇博文:Python基础之控制台输出颜色_zxnode的博客-CSDN博客
打印颜色还可以用termcolor(使用termcolor包美化Python命令行输出)
想要更好看的打印格式还可以用pprint(pprint包的使用介绍)
2. 输入
input()
:函数等待用户在键盘上输入一些文本,并按下回车键。这个函数的值为一个字符串,即用户输入的文本。输入参数为显示标识
9. 上下文管理器
with+上下文管理器:在使用的过程中,可以简单地认为with语句自动设置一种状态的环境,不需要显式控制开始和结束。如with open('file.txt') as f:
语句下包裹的代码运行之间自动打开文件流,运行后自动关闭;with torch.no_grad():
语句下包裹的代码自动停止梯度计算。更多细节可参考8
contextlib包:提供了一些用于创建和管理上下文的实用工具函数和装饰器。它主要用于简化上下文管理器的创建过程
官方文档:contextlib — Utilities for with-statement contexts — Python 3.11.5 documentation
- 创建上下文管理器:
from contextlib import contextmanager @contextmanager def my_context(): # 进入上下文前的操作 setup() try: yield # 返回上下文对象 finally: # 离开上下文后的操作 teardown() with my_context() as ctx: # 在上下文中执行的代码 do_something()
- 将没有实现上下文管理器接口的对象转换为上下文管理器:
from contextlib import closing from urllib.request import urlopen with closing(urlopen('http://www.example.com')) as page: for line in page: print(line)
10. 装饰器
装饰函数,语法糖。
如@torch.no_grad()
。
简单实现可参考python3-装饰器_花_城的博客-CSDN博客_python3 装饰器
11. 常见简单bug(比较复杂的有些我会专门写一篇博文)
- Python运行报SyntaxError: Non-UTF-8 code starting with ‘\xe5‘ in file的解决方法_syntaxerror: non-utf-8 code starting with ‘\xe5’ i_秋9的博客-CSDN博客:在Python文件开头加
# coding:utf-8
- " " 和 " " 两个看起来都像空格,但实际上它们是不同的字符。
" " 是ASCII字符集中的空格,也被称为普通空格或半角空格。它的Unicode编码是U+0020。
" " 是CJK字符集中的空格,也被称为全角空格。它的Unicode编码是U+3000。全角空格的宽度是普通空格的两倍,通常用在需要对齐的文字中,特别是在中文、日文和韩文中。
在Python中,你可以使用ord
函数来获取这两个字符的Unicode编码,以此来区分它们。例如:
在处理文本数据时,通常需要注意这两种空格可能带来的影响。print(ord(" ")) # Output: 32 print(ord(" ")) # Output: 12288
SyntaxError: Non-UTF-8 code starting with '\xe5' in file
解决方案:在Python文件首行添加#coding=utf-8
9
12. jupyter notebook
The Jupyter Notebook — Jupyter Notebook 6.5.4 documentation
- jupyter notebook打开出现
Unreadable Notebook: coda_path\btc-master (16.2)\btc_close_2017.ipynb NotJSONError('Notebook does not appear to be JSON: \'\\ufeff{\\n "cells": [\\n {\\n "cell_typ...')
问题,解决方法:用json格式化工具将ipynb文件进行格式化(如JSON在线 | JSON解析格式化—SO JSON在线工具格式化后即可) - 如何设置Jupyter Notebook可远程访问:
设置 jupyter notebook 可远程访问 - Liu-Cheng Xu - CSDN博客
远程访问jupyter notebook - Echo/ - 博客园
服务器(CentOS7)配置Jupyter Notebook远程访问 - 水水 - CSDN博客
如何访问服务器的 Jupyter notebook - 知乎
云服务centos搭建jupyter notebook并通过外网访问_开发工具_taw19960426的博客-CSDN博客 - 在jupyter notebook中,清除输出10:
输出效果:from IPython.display import clear_output print('before') clear_output() # 清除输出 print('after')
after
- magic function
打印行运行时长:%time
打印cell运行时长:%%time
打印函数运行时长:%timeit
(用法:%timeit function()
)11
13. colab教程
教程:Google Colab免费GPU使用教程(一)
colab里面更换GPU/CPU会导致会话重启
https://colab.research.google.com/notebooks/welcome.ipynb
https://colab.research.google.com/notebooks/打开文件
14. 其他常用功能库
1. yaml
- 一个从老版本转换为新版本时会遇到的问题:
TypeError: load() missing 1 required positional argument: 'Loader' in Google Colab
解决方案:将load()
改为safe_load()
12
2. 进度条
1. tqdm
(官方GitHub项目:tqdm/tqdm: A Fast, Extensible Progress Bar for Python and CLI)
使用pip安装:pip install tqdm
简单用法:用from tqdm import tqdm
引入,然后在for语句中加到迭代器上,如for i in tqdm(range(10))
,然后在运行循环语句的过程中就会出现进度条:
常用入参:
desc
:字符串入参+:
会出现在进度条前,示例:
2. alive-progress
主要是有一台服务器我tqdm不知为啥显示不了进度条,所以我就改用alive-progress了
alive-progress · PyPI
GitHub - rsalmei/alive-progress: A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!
使用pip安装:pip install alive-progress
- 知道迭代数的情况:
from alive_progress import alive_bar with alive_bar(总迭代数) as bar: for sample in 迭代器: 操作 bar()
3. random库:生成伪随机数
random — Generate pseudo-random numbers — Python 3.11.3 documentation
- 设置随机数种子:
random.seed(a)
- 生成分布的一个样本(数字)
random.random()
:生成[0.0, 1.0) 范围内的下一个随机浮点数random.uniform(a, b)
:生成二数之间的一个随机数。终点 b 可以包括或不包括在该范围内。gauss(mu=0.0, sigma=1.0)
:高斯分布/正态分布(Python 3.11之后两个属性才有默认值,在此之前都要)random.randrange(stop)
random.randrange(start, stop[, step])
从range(start, stop, step)
中随机抽取一个元素,与choice(range(start, stop, step))
等价,但并不真的创造一个range
对象
- 原地打乱序列顺序:
random.shuffle(x)
4. copy库:复制对象
copy库官方文档:copy — 浅层 (shallow) 和深层 (deep) 复制操作 — Python 3.11.0 文档
copy.deepcopy(obj)
:返回对象深度复制后的对象,二者的操作互不影响
5. math库
- 开方:
math.sqrt(数字)
- 检测数字是否是nan:
math.isnan(数字)
6. statistics库:数学统计函数
statistics库官方文档:statistics — Mathematical statistics functions — Python 3.11.1 documentation
- 求平均值:
statistics.mean(obj)
7. SymPy库:科学计算
官方文档:SymPy 1.11 documentation
参考博文:Python科学计算利器——SymPy库 - 简书
8. warnings库
warnings库官方文档:warnings — Warning control — Python 3.11.2 documentation
1. warnings.filterwarnings('ignore')
13:直接忽略警告
9. 发邮件
首先搞个SMTP服务的邮箱账号来发邮件。以网易邮箱为例,开启POP3/SMTP/IMAP服务:
示例代码:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='xxxxx@yeah.net' # 发件人邮箱账号
my_pass = 'xxxxx' # 发件人邮箱密码(当时申请smtp给的口令)
my_user='xxxxx@xx.com' # 收件人邮箱账号
def mail():
ret=True
msg=MIMEText('填写邮件内容','plain','utf-8')
msg['From']=formataddr(["发件人昵称",my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(["收件人昵称",my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']="邮件主题-测试" # 邮件的主题,也可以说是标题
server=smtplib.SMTP_SSL("smtp.yeah.net",587)
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender,[my_user,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit()# 关闭连接
return ret
ret=mail()
10. 压缩与解压缩文件:zipfile库
zipfile — 使用ZIP存档 — Python 3.11.3 文档
- 创建ZipFile对象:
zFile=zipfile.ZipFile(zip_file_path,"r")
- 提取ZipFile下的所有文件(返回值是文件名),并解压到对应文件夹中:
- 关闭ZipFile对象:
zFile.close()
12. shutil库:高阶文件操作
shutil — 高阶文件操作 — Python 3.11.3 文档
1. shutil.rmtree(path)
:删除文件夹及其下的所有内容
常用的另一个操作文件的库os可以参考我写的博文:os:与操作系统有关的Python操作
12. cn2an库:在汉字与阿拉伯数字之间进行转换
cn2an官方GitHub项目:Ailln/cn2an: 📦 快速转化「中文数字」和「阿拉伯数字」~ (最新特性:分数,日期、温度等转化)
- 将汉字转换为阿拉伯数字:
cn2an.cn2an('3.2万','smart')
输出:32000
- 第二个入参
'smart'
:可以接受中英文与阿拉伯数字混合的形式,但是不接受,
和空格等符号
- 第二个入参
13. webssh
14. pipx:包管理工具(可以在隔离环境下安装包)
pypa/pipx: Install and Run Python Applications in Isolated Environments
pipx · PyPI
Linux平台的安装方式:
python3 -m pip install --user pipx
python3 -m pipx ensurepath
15. chardet:检测bytes或bytearray的编码方式
chardet · PyPI
chardet — chardet 5.0.0 documentation
import chardet
print(chardet.detect(rawdata))
如果rawdata是str格式的话,可能需要写成rawdata.encode()
14(这个似乎是Python版本的问题,我用Python 3.6.8时就需要使用这个)
16. 检测字符串的语种
pycld2
基于谷歌CLD2工具(GitHub - CLD2Owners/cld2: Compact Language Detector 2)实现的pycld2(GitHub - aboSamoor/pycld2)
pip install pycld2
import pycld2 as cld2
from pprint import pprint
isReliable, textBytesFound, details = cld2.detect(
"а неправильный формат идентификатора дн назад"
)
print(isReliable)
print(textBytesFound)
pprint(details)
输出:
True
87
(('RUSSIAN', 'ru', 98, 404.0),
('Unknown', 'un', 0, 0.0),
('Unknown', 'un', 0, 0.0))
另外有另一个基于CLD2实现的cld2-cffi(GitHub - GregBowyer/cld2-cffi: Python bindings to the Compact Language Detector),但是安装不了啊。
langdetect库:检测字符串的语言
17. 从文本中抽取URL(超文本链接/网址)
- urlextract包
pypi网址:urlextract · PyPI
官方文档:Welcome to urlextract’s documentation! — urlextract 1.8.0 documentation
安装方法:pip install urlextract
用法:
结果是一个这样的列表:from urlextract import URLExtract extractor=URLExtract() urls=extractor.find_urls("Text with URLs. Let's have URL janlipovsky.cz as an example.")
['janlipovsky.cz']
这个包的问题在于似乎对中文的处理很糟糕,所以事实上还是建议用下面这个正则表达式: - 使用(ChatGPT帮我写的)正则表达式:
得到一个字符串列表,第一个元素就是网址import re url_pattern=re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+') official_sites=re.findall(url_pattern,'ASPLOS会议的官网是https://www.asplos-conference.org/,2023年论文提交截止时间是2022年10月20日。')
https://www.asplos-conference.org/
18. urllib
从网址中提取域名
from urllib.parse import urlparse
urlparse(an_url_string).netloc
将可读字符串转换为URL
from urllib.parse import quote
decoded_url = "https://github.com/dongrixinyu/JioNLP/wiki/NER-说明文档#user-content-货币金额实体抽取"
encoded_url = quote(decoded_url, safe=':/#-')
print(encoded_url)
safe 参数指定了不应该被编码的字符集。在这种情况下,我们选择保留URL中常见的一些安全字符,如冒号、斜杠、井号和连字符。
输出:https://github.com/dongrixinyu/JioNLP/wiki/NER-%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3#user-content-%E8%B4%A7%E5%B8%81%E9%87%91%E9%A2%9D%E5%AE%9E%E4%BD%93%E6%8A%BD%E5%8F%96
将URL转换为可读字符串
from urllib.parse import unquote
url = "https://github.com/dongrixinyu/JioNLP/wiki/NER-%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3#user-content-%E8%B4%A7%E5%B8%81%E9%87%91%E9%A2%9D%E5%AE%9E%E4%BD%93%E6%8A%BD%E5%8F%96"
decoded_url = unquote(url)
print(decoded_url)
输出:https://github.com/dongrixinyu/JioNLP/wiki/NER-说明文档#user-content-货币金额实体抽取
19. secrets — 生成管理密码的安全随机数 — Python 3.11.3 文档
secrets.token_hex([nbytes=None])
:返回十六进制随机文本字符串。字符串有 nbytes 个随机字节,每个字节转换为两个十六进制数码。未提供 nbytes 或为 None 时,则使用合理的默认值。
>>> token_hex(16)
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
20. 背景任务调度
- schedule包:轻量级的定时任务库
适用场景:有个代码我想要每天早上9点时候运行一遍
schedule包官方文档:schedule — schedule 1.2.0 documentation
安装方式:pip install schedule
示例代码:
import schedule
import time
def job():
# 这里是你的任务代码
print("Task is running...")
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
- APScheduler包
APScheduler包官方文档:Advanced Python Scheduler — APScheduler 3.9.1 documentation
示例代码:
from apscheduler.schedulers.background import BackgroundScheduler
def task():
# 这里是你要定时执行的任务
print("Task is running...")
app = Flask(__name__)
if __name__ == "__main__":
scheduler = BackgroundScheduler()
scheduler.add_job(func=task, trigger="cron", hour=9)
scheduler.start()
cron
触发器,可以让我们按照Cron风格的时间表达式来定时任务scheduler.start()
启动调度器
3. Celery - Distributed Task Queue — Celery 5.3.0 documentation
4. RQ: Simple job queues for Python
21. base64
将Excel文件编码为base6415:
import base64
data = open(excel_path, 'rb').read()
base64_encoded = base64.b64encode(data).decode('UTF-8')
22. html库
- 将HTML实体转换为字符串:
from html import unescape unescaped_text = unescape(text)
23. ftfy库:修复字符编码bug
Home - ftfy: fixes text for you
24. JioNLP包
- 从自然语言中抽取时间:请参考我撰写的另一篇博文Python3中对时间的处理(持续更新ing…)
- 从自然语言中抽取金额16
示例代码:
text="张三赔偿李大花人民币车费601,293.11元,工厂费大约一万二千三百四十五元,利息9佰日元,打印费十块钱。"
res = jio.ner.extract_money(text, with_parsing=False)
#[{'text': '601,293.11元', 'offset': [12, 23], 'type': 'money'}, {'text': '大约一万二千三百四十五元', 'offset': [27, 39], 'type': 'money'}, {'text': '9佰日元', 'offset': [42, 46], 'type': 'money'}, {'text': '十块钱', 'offset': [50, 53], 'type': 'money'}]
number_str_list=[jio.parse_money(x["text"]) for x in res]
#[{'num': '601293.11', 'case': '元', 'definition': 'accurate'}, {'num': '12345.00', 'case': '元', 'definition': 'blur'}, {'num': '900.00', 'case': '日元', 'definition': 'accurate'}, {'num': '10.00', 'case': '元', 'definition': 'accurate'}]
#注意这里num的值可能是一个数组
25. difflib:比较序列
difflib — 计算差异的辅助工具 — Python 3.11.5 文档
- SequenceMatcher
可以比较任何可哈希的序列对象
计算字符串a
和b
的相似度:SequenceMatcher(None, a, b).ratio()
(会返回一个介于0和1之间的浮点数,用于描述这两个字符串的相似程度。返回值为 1 表示两个字符串完全相同,而返回值为 0 表示两个字符串没有任何相似之处。)
26. signal包
官方文档:signal — Set handlers for asynchronous events — Python 3.11.5 documentation
15. 实现其他小功能
将字符串限制在6000字节以内
这里主要是考虑多种语言的场景,英语反正一个字母就一个字节:
先将字符串编码为字节串,然后再进行长度检查和切片
def limit_byte_length(s, max_bytes):
# 将字符串编码为字节串
byte_str = s.encode('utf-8')
# 如果字节串的长度超过最大字节长度,进行切片
if len(byte_str) > max_bytes:
byte_str = byte_str[:max_bytes]
# 将字节串解码回字符串
s = byte_str.decode('utf-8', 'ignore')
return s
# 测试
s = "这是一个测试字符串"
max_bytes = 6000
s = limit_byte_length(s, max_bytes)
如果一个字符的一部分字节被切片掉,解码时会产生错误。为了避免这个问题,我们在解码时使用了'ignore'
错误处理选项,这会忽略所有无法解码的字节。
这个函数假设你的字符串是UTF-8编码的。如果你的字符串使用其他编码,你需要相应地修改编码和解码的部分。
16. 本文撰写过程中参考的其他资料
- Python3 lower()方法 | 菜鸟教程
- Python3 strip()方法 | 菜鸟教程
- Python3 错误和异常 | 菜鸟教程
- Python3 集合 | 菜鸟教程
- Python Set intersection() 方法 | 菜鸟教程
- Python打印对象的全部属性_来玩魔王的咚!的技术博客_51CTO博客
- Python3 List count()方法 | 菜鸟教程
- Python3 find()方法 | 菜鸟教程
- python3利用smtplib通过qq邮箱发送邮件_嗨学编程的博客-CSDN博客
- Python系列文章-Python字符串修饰符总结 | RongXiang
- python 删除文件夹、删除非空文件夹_python删除文件夹_suibianshen2012的博客-CSDN博客
- Python中list列表、元组、字典前面加星号是什么意思?_元祖前面加*_努力改掉拖延症的小白的博客-CSDN博客
- Python list变量加星号,字典变量前面加星号 - 知乎
- 菜鸟教程-Python3函数
- python计算两个日期之间的天数、月数相差_python计算日期之间月份差_Charles.zhang的博客-CSDN博客
- python 字符串去除中文_python 去除中文_luoganttcc的博客-CSDN博客
-
Python3 filter() 函数 | 菜鸟教程
Python中如何从列表中删除None值_python输出none怎么去掉_word_mhg的博客-CSDN博客 ↩︎ -
Python函数独立星号()分隔的命名关键字参数_python 函数传入参数以作为分割_LaoYuanPython的博客-CSDN博客 ↩︎
-
reqiests_SyntaxError: Non-UTF-8 code starting with ‘\xe5’ in file-CSDN博客
python报错Non-ASCII character ‘\xe5’ in file的解决方法-CSDN博客 ↩︎ -
python在jupyter notebook/terminal/console下的输出清空_jupyter lab 清空以下控制台_SL_World的博客-CSDN博客:这篇文章中也介绍了终端清空输出的解决方案,但我不知为啥无法实现 ↩︎
-
python - TypeError: load() missing 1 required positional argument: ‘Loader’ in Google Colab - Stack Overflow ↩︎
-
warnings.filterwarnings(“ignore”)代码解析_我是管小亮的博客-CSDN博客_filterwarnings ↩︎
-
python - I use chardet to test encode , but i got error - Stack Overflow ↩︎
-
python - How to encode an Excel File to base64 - Stack Overflow ↩︎
-
官方教程参考这两篇:https://github.com/dongrixinyu/JioNLP/wiki/NER-说明文档#user-content-货币金额实体抽取
https://github.com/dongrixinyu/JioNLP/wiki/正则抽取与解析-说明文档#user-content-货币金额解析 ↩︎