常用内置模块或函数
# time模块
# 导入模块
import time
# 获取时间戳
time.time()
- 获取时间戳,从1970年到现在经过的秒数。
- 可用于不同时间之间相差的计算,例如:
start = time.time()
end = time.time()
interval = end - start
1
2
3
2
3
# 按指定格式显示时间
time.strftime('format')
- 按指定格式显示时间,同linux中date命令用的格式一样
- 如:
time.strftime('%F %T')
time.strftime('%Y-%m-%d %H:%M:%S')
- 作用
- 用于更直观的显示时间
# 获取结构化时间
time.localtime()
- 如: 计算机现在的年份、现在的月份、今份的第几天、第几小时、第几分钟、第几秒、本周的第几天等。
- 例如
print(time.localtime())
print(time.localtime().tm_year)
- 作用
- 用于单独获取时间的某一部分
# 时间格式的转换
- 字符串 -> 结构化时间
time.strptime('时间字符串', '格式')
time.strptime('2000-03-03 11:11:11', '%F %T')
- 结构化时间 -> 时间戳
time.mktime(struct_time)
- 结构化时间 -> 格式化时间
time.strftime('%F %T', struct.time)
- 时间戳 -> 结构化时间
time.localtime(tp_time)
# 使程序休眠n秒
- time.sleep(n)
- 例如
time.sleep(3)
# datetime模块
# 导入模块
- import datetime
# 获取已格式化的当前时间
datetime.datetime.now()
- 同时可以在该方法获得的时间的基础上,进行时间的运算,如:获取过去或未来n天的日期
# 时间计算
datetime.timedelta()
- 用于datetime的时间类型的计算
- 例如
# 计算三天前的时间
now = datetime.datetime.now()
print(now + datetime.timedelta(days=-3))
# 运算符也可以放中间,但推荐放后面,如:days=-3
now - datetime.timedelta(days=3)
# 计算三天后的时间
now = datetime.datetime.now()
print(now + datetime.timedelta(days=+3))
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 时间格式的转换
- 时间戳 —> 格式化时间
datetime.datetime.fromtimestamp(tp_time)
- 字符串 —> 格式化时间
datetime.datetime.strptime(strtime,fmt)
- 如:
datetime.datetime.strptime('2021-06-02 12:21:12', '%Y-%m-%d %H:%M:%S')
# turtle模块
# 介绍
- 通过
import turtle
导入模块。turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制。 - turtle库绘制图形有一个基本框架:一个小海龟在平面坐标系中爬行,其爬行轨迹形成了绘制图形。对于小海龟来说,有"前进"、"后退"、"旋转"等爬行行为,对坐标系的探索也通过"前进方向"、"后退方向"、"左侧方向"、"右侧方向"等小海龟自身角度方位来完成。
# 常用状态函数
setup(width, height, startx, starty)
- 窗口函数,用于设置图形绘制主窗口的大小和位置。
- 参数:
- width:窗口宽度,如果值是整数,表示的像素值。如果值是小数,表示窗口宽度与屏幕的比例。
- height:窗口高度,如果值是整数,表示的像素值。如果值是小数,表示窗口宽度与屏幕的比例。
- startx:窗口左上角在屏幕中的水平位置,值默认为None,表示窗口位于屏幕水平中央。
- starty:窗口左上角在屏幕中的垂直位置,值默认为None,表示窗口位于屏幕垂直中央。
pendown()
- 放下画笔,进行轨迹绘制(默认)。移动画笔位置会留下痕迹。
penup()
- 拿起画笔,不进行轨迹绘制。拿起画笔后移动画笔位置不会留下痕迹。
pensize(width)
- 设置画笔线条的粗细。
pencolor(画笔色)
- 设置画笔的颜色。
- 例如:
turtle.pencolor('green')
color(画笔色, 填充色)
turtle.color(画笔色, [填充色])
- 设置画笔和填充颜色。
- 例如:
turtle.color('green', 'red')
begin_fill()
- 开始填充图形,填充图形前需要调用该方法。
end_fill()
- 结束填充图形。
filling()
- 返回填充状态,布尔值。
clear()
- 清空当前窗口,画笔位置不会重置。
reset()
- 重置当前窗口,画笔位置也会重置。
write(str, font=None)
- 输出font字体的字符串。
hideturtle()
- 隐藏画笔形状。
showturtle()
- 显示画笔形状(默认)。
done()
- 暂停程序,在程序最后添加可以防止窗口退出。
- 它的目的是给用户时间来查看图形,没有它,图形窗口会在程序完成是立即关闭。
# 常用运动函数
fd()
- 沿着当前方向前进指定像素距离,和forward()函数功能一致。
- 可以通过指定负数表示后退,例如:
turtle.fd(-100)
setheading(angle)
- 设置当前朝向为指定的角度,可以简写为
seth()
,例如:turtle.seth(120)
left(angle)
- 将画笔向左旋转指定的角度。
right(angle)
- 将画笔向右旋转指定的角度。
circle(r, e, [c])
- 绘制一个半径为r、角度为e的圆或弧形。
- 还可以指定c指定绘制时的线条数量。
undo()
- 撤销画笔的最后一步动作。
goto(x, y)
- 将画笔移动到绝对坐标(x, y)处,画笔方向不变。
speed()
- 设置画笔的绘制速度,速度范围为0~10。
- 0最快、10快、6正常、3慢、1最慢。
dot(d, color)
- 绘制一个直径为d、颜色为color的圆点。
home()
- 移动画笔位置到原点,然后朝向东。
# random模块
# 导入模块
import random
# 设置随机数种子
random.seed(n)
- 随机数种子相同,生成的随机数就相同。默认是当前系统时间。
# 随机返回一个0~1之间的小数
random.random()
- 包括0.0但不包括1.0。
# 随机返回一个n~m之间的整数
random.randint(n,m)
- 头和尾都可以被取到。
# 随机返回一个n~m之间的浮点数
random.uniform(n,m)
- 头和尾都可以被取到。
# 随机从指定的列表中取出一个值
random.choice(list)
- 例如:
print(random.choice([1,2,3]))
# 随机从指定的列表中取出n个值
random.sample(list,n)
- 例如:
print(random.sample((1,2,3), 2)
# 随机验证码
chr(n)
- 根据ASCII码将数字转换成对应的英文字母。
ord('A')
- 根据ASCII码将英文字母转换成对应的数字。
- 实现
res = ""
for i in range(4):
# 随机数字
num = str(random.randint(0,9))
# 随机大写字母
upword = chr(random.randint(65,90))
# 随机小写字母
loword = chr(random.randint(97,122))
res+=random.choice([num,upword,loword])
print(res)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# string模块
# 导入模块
import string
# 包含所有大写和小写字母
string.ascii_letters
# 包含所有整数 0-9
string.digits
# 包含所有小写字母的字符串
string.ascii_lowercase
# 包含所有大写字母的字符串
string.ascii_uppercase
# os模块
# 作用
- os模块可用于控制多数的操作系统
- 但有些函数并非所以系统都能使用
# 常用变量
os.name
- 记录操作系统的名字。
- 如:Windows是nt、Linux是posix。
# 常用函数
- 参数皆为str字符串类型
- 查
__file__
- 内置变量,表示当前文件
os.path.dirname(__file__)
- 获取指定文件所在目录
os.listdir(path)
- 列出path目录下所有的文件和目录名,返回一个列表
- 不指定path则默认为脚本运行的目录
os.getcwd()
- 返回当前工作的目录
- 默认为运行脚本时所在的目录
os.access(path, mode)
- 检查是否有指定权限
mode
为- 一次检查多个权限可用逗号隔开
os.F_OK
- 测试path是否存在
os.R_OK
- 测试path是否可读
os.W_OK
- 测试path是否可写
os.X_OK
- 测试path是否可执行
os.path.abspath(path)
- 获取相对路径文件的绝对路径
os.path.exists(path)
- 检验指定的对象是否存在
- 存在返回True,否则False
os.path.isfile(path)
- 判断指定对象是否为文件
- 是返回True,否则False
os.path.isdir(path)
- 判断指定对象是否为目录
- 是True,否则False
os.path.split(path)
- 返回一个元组,记录传入的路径的目录和文件名
- 就是将最后一个 / 的左边右边分开
os.path.getsize(path)
- 获得文件的大小
- 改
os.chdir(path)
- 改变当前工作目录到指定目录
os.rename(oldname, newname)
- 重命名文件或目录
- 从 oldname 到 newname
os.system(cmd)
- 执行shell命令,返回值是脚本的退出状态码
- shell中0为成功,非0为不成功
- 增
os.mkdir(path)
- 创建path指定的目录,不可递归创建
os.makedirs(path/path...)
- 创建path指定的目录,可递归创建
- 删
os.remove(path)
- 删除path指定的文件
os.rmdir(path)
- 删除path指定的空目录,无法删除有文件的目录
# sys模块
# 获取执行Python文件时传进来的参数
- sys.argv
- 记录执行Python文件时传进来的参数
- 如:
python main.py 参数1 参数2...
- 输出
[.../main.py, 参数1, 参数2]
# 获取Python搜索文件的路径的变量
- sys.path
- 记录Python搜索文件的路径的变量
# 打印进度条
# 实现思路
- 通过除,获得值的百分比,传入百分比,再根据百分比*#然后进行打印
# 实现例子
def bar(now_size, total_size):
while now_size < total_size:
now_size += 10240
percent = now_size / total_size
if percent > 1:
percent = 1
res = int(50 * percent) * '#'
print('\r[{a: <50}]{b}%'.format(a=res, b=int(100 * percent)), end='')
now_size = 0
total_size = 333333
bar(now_size, total_size)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# shutil模块
# 导入模块
- import shutil
- 用于对文件进行基本操作
# 拷贝文件
shutil.copyfile(src, dest)
# 拷贝文件和权限
shutil.copy(src, dest)
# 拷贝目录
shutil.copytree(src, dest)
ignore=shutil.ignore_patterns('要排除的文件')
- 可使用通配符
# 递归的去删除文件夹中的文件
shutil.rmtree(path)
# 递归的移动文件
- shutil.move(src, dest)
# 压缩文件
shutil,make_archive('压缩后文件名', '压缩方式', root_dir='要压缩的文件夹')
- 压缩方式
- zip/tar/bztar/gztar
# 进制转换
- 十进制转其他进制
- 10进制转2进制:
bin(十进制数)
- 10进制转8进制:
oct(十进制数)
- 10进制转16进制:
hex(十进制数)
- 10进制转2进制:
- 其他进制转十进制
- 2进制转10进制:
int("二进制", 2)
- 8进制转10进制:
int("二进制", 8)
- 16进制转10进制:
int("二进制", 16)
- 2进制转10进制:
# range函数
range(范围数)
- 生成范围迭代对象,默认以 0 作为起点,可作为循环的迭代对象
- Python2,不指定起点数,会以0为起点,返回指定范围的列表,如 range(5) 会返回 [1,2,3,4,5]
- Python3,不指定起点数则会生成对应的range代码,如 range(5) 会返回 range(0,5)
- 比python2的方式,更节省内存
- 作为迭代对象时,仍然有效
- 生成范围迭代对象,默认以 0 作为起点,可作为循环的迭代对象
range(起点数, 结束数)
- 顾头不顾尾,如:传入(1,3) 可以得到 [1,2]
range(起点数 , 结束数 , 步长)
- 步长就是每次加多少,默认是1
# Configparser模块
# 用来读取解析配置文件
# 配置文件格式
[section1]
key = value
... ...
[section2]
key = value
... ...
1
2
3
4
5
6
2
3
4
5
6
- 例如
# 或 ; 是注释
[mysqld]
user = mysql
group = mysqls
1
2
3
4
2
3
4
# 读配置文件
# 实例化
config = configparser.ConfigParser()
# 读取配置文件到内存
config.read('文件路径', encoding='utf-8')
1
2
3
4
2
3
4
# 获取配置项
config.sections()
- 获取所有 section,返回一个列表
config.options('section_name')
- 获取某一 section 下的所有 option 键名
config.items('section_name')
- 获取某一 section 下的所有 option 键值对
- 返回一个列表,键值对用元组分隔
config.get('section_name', 'option_key')
- 获取 option 键对应的值
config.getint('section_name', 'option_key')
- 获取值转换为整数类型
config.getfloat('section_name', 'option_key')
- 获取值转换为浮点类型
# Hashlib模块
# 介绍
- Hash,译做"散列",也有直接音译为"哈希",hash算法就是哈希函数,也称摘要函数
- 把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值
- 特点
- 只要传入的内容一样,得到的hash值必然一样
- 可用于传输密码、校验文件完整性等
- 不能由hash值返解成内容
- 但可能会被撞库对撞出来
- 可以通过加盐解决
- 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
- 只要传入的内容一样,得到的hash值必然一样
# 常见hash算法
- 注意
- 算法越安全,速度越慢,摘要长度越长
- MD5
- 最常用的算法,速度很快,它的结果是16字节长度,通常用一个32位的16进制字符串表示
- SHA1
- 比MD5更安全一点,它的结果是20字节长度,通常用一个40位的16进制字符串表示
- SHA256和SHA512
- 比SHA1更安全的算法,但越安全,速度越慢
# 使用方法
import hashlib
- 导入模块
hash = hashlib.md5()
- 获得MD5散列生成器对象
- 也可以在此加盐
- 再调用update前,事先就在其中加上"Test"
hash.update(bytes)
- 传入Bytes类型,得到MD5散列
- 传入的值不会清空,下次再update传入值时,则会拼接上次传入的值
- 所以也可以用来加盐
hash.hexdigest()
- 获得产生的hash值
- 例如:
a = hashlib.md5(b'Test')
a.update(b"English")
a.update("中文".encode('utf-8'))
res_md5 = a.hexdigest()
# 或
a = hashlib.md5()
a.update("TestEnglish中文".encode('utf-8'))
res_md5 = a.hexdigest()
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 使用案例
- 校验文件一致性
import hashlib
mdfive = hashlib.md5()
with open('test.txt', 'rb') as f:
for line in f:
mdfive.update(line)
print(mdfive.hexdigest())
1
2
3
4
5
6
2
3
4
5
6
# Subprocess模块
# 作用
- 启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值
- 可用于执行系统命令并获得输出和返回值等
# 用法
popen = subprocess.Popen()
- 常用参数
- 执行系统命令并返回输出 + 返回值
- 调用会返回一个CompletedProcess实例
- 命令即是程序,子进程即是命令程序的进程
args
- 默认需要使用数组运行命令
subprocess.run(['df', '-h'])
shell=True
- 为True则创建操作系统的 shell 执行命令
- 默认False
- 为True可使用字符串运行命令
subprocess.run('df -h', shell=True)
- 为True则创建操作系统的 shell 执行命令
stdin、stdout、stderr
- 分别表示程序的标准输入、标准输出、标准错误
- 值可以为
None
- 默认为None,表示什么都不做
subprocess.PIPE
- 表示将命令执行的结果丢到一个新管道去
- 然后就可以通过管道取出结果
subprocess.DEVNULL
- 表示使用 os.devnull
- 存在的文件描述符、文件对象
- 例如:
stdin=subprocess.PIPE
encoding
- 如果指定了该参数,则会stdin、stdout、stderr的结果按照指定的编码格式进行解码,不指定则返回Bytes类型
timeout=num
- 设置命令超时时间,单位为秒
cwd
- 指定命令执行的目录路径
env
- 用于指定子进程的环境变量
- 执行系统命令并返回输出 + 返回值
- 方法
popen.[stdin/stdout/stderr].read()
- 读取指定管道的输出结果
popen.returncode
- 返回子进程的返回值,如0代表执行成功
- 若值为负值 "-N",表明子进程被终
popen.poll()
- 检查进程是否终止,如果终止返回 returncode,否则返回 None
popen.kill()
- 杀死子进程,发送SIGKILL信号到子进程
- 常用参数
# Re模块
# 导入模块
- import re
# 正则符号
\w
-- 匹配字母、数字、下划线\W
-- 匹配非字母、数字、下划线[abc]、[^abc]
- []括号内的^表示取反
[a-z]、[A-Z]、[0-9]、[a-zA-Z0-9]
[]
内的-
左右两侧都有字符、则表示一个范围
"^"、"$"、"."、"*"、"+"、"?"
"{n}"、"{n,m}"、"|"、"()"、"\n"
# re.findall
- re.findall('正则表达式', '字符串')
- 匹配所有满足条件的结果,放在列表里
# re.search
- re.search('正则表达式', '字符串').group()
- 只到找到第一个匹配的,然后返回一个包含匹配信息的对象
- 需用调用 group() 方法取出匹配的字符串,如果没有匹配则返回None
# re.sub
- re.sub('原字符','目标字符','字符串', num)
- 从左往右替换字符串,然后返回替换后的字符串
- 不指定次数则替换所有匹配的字符
- num
- 指定替换次数,只替换相应次数
- 不指定则为匹配成功的全部都替换
# Pyinstaller
# 其他常用内置函数
# abs
abs(值)
- 取绝对值
# all
all(可迭代对象)
- 其中的可迭代类型的值,只有全为true时,
all()
返回的才为True,否则返回False
# any
any(可迭代对象)
- 其中的可迭代类型的值,只要有一个为True,
any()
就会返回True,否则返回False
# dir
dir()
- 查看对象或类中有哪些属性
# divmod
divmod(x, y)
- 除数和余数运算结果结合起来,返回一个包含商和余数的元组。
- 同等于(x//y, x%y)。
# round
round(浮点数)
- 将浮点数4舍6入,奇进偶不进。
- 当尾数为1到4中的数字时,就不进位。
- 当尾数为6到9中的数字时,就进位。
- 当尾为5时,看5前面一位,如果是奇数,就进位。否则就不进位。
# pow
pow(x, y, [z])
- 对值进行幂运算。
- 同等于
x**y
和x**y%z
。
# max
max(x1, x2, ...,xn)
- 取任意多数量的最大值。
# min
min(x1, x2, ...,xn)
- 取任意多数量的最小值。
# isinstance
isinstance(对象, 类)
- 用于判断对象是否属于指定类或类型。
# zip
zip(可迭代对象1, 可迭代对象2)
- 将两个可迭代对象的每个值,一一对应的作为元组拼凑到一起
# import
名称 = __import__('模块名称')
- 以字符串的方式导入函数,并返回模块给名称
- 同等于import time as time,但可用字符串的方式导入
print输出换行
print("\n")
print指定结尾符
print("test", end="@")
- end默认为 \n 换行