跳转至

Python 内置库

本文将介绍 Python 中的几个常用的内置库(标准库)。

本文仅仅是常用内置库的简要示例,完整使用方式请参考 Python 官方文档

1. JSON(json)

JSON 库主要用于生成、解析 JSON 数据。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import json

d = {
    'name': 'Tom',
    'age' : 25,
    'job' : 'Student',
    'desc': '一位学生',
}
print('输出为 JSON 字符串                           :', json.dumps(d))
print('输出为 JSON 字符串(指定分隔符紧缩形式)     :', json.dumps(d, separators=(',', ':')))
print('输出为 JSON 字符串(指定其他分隔符)         :', json.dumps(d, separators=(', ', ' = ')))
print('输出为 JSON 字符串(中文等不转为为 ASCII 码):', json.dumps(d, ensure_ascii=False))
print('输出为 JSON 字符串(指定缩进)               :', json.dumps(d, indent=2))

s = '{"name": "Tom", "age": 25, "job": "Student", "desc": "一位学生"}'
print('解析为 Python 对象:', json.loads(s))

输出:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
输出为 JSON 字符串                           : {"name": "Tom", "age": 25, "job": "Student", "desc": "\u4e00\u4f4d\u5b66\u751f"}
输出为 JSON 字符串(指定分隔符紧缩形式)     : {"name":"Tom","age":25,"job":"Student","desc":"\u4e00\u4f4d\u5b66\u751f"}
输出为 JSON 字符串(指定其他分隔符)         : {"name" = "Tom", "age" = 25, "job" = "Student", "desc" = "\u4e00\u4f4d\u5b66\u751f"}
输出为 JSON 字符串(中文等不转为为 ASCII 码): {"name": "Tom", "age": 25, "job": "Student", "desc": "一位学生"}
输出为 JSON 字符串(指定缩进)               : {
  "name": "Tom",
  "age": 25,
  "job": "Student",
  "desc": "\u4e00\u4f4d\u5b66\u751f"
}
解析为 Python 对象: {'name': 'Tom', 'age': 25, 'job': 'Student', 'desc': '一位学生'}

2. 正则表达式(re)

正则表达式库较为复杂,以下为一些简单的示例。完整的官方文档请参考 re — Regular expression operations

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import re

# 查找字符串
m = re.search('[0-9]+','abcd1234xyz')
if m:
    print('查找满足正则表达式的内容:', m.group(0))
else:
    print('无法找到指定内容')

# 判断是否匹配
m = re.match('[0-9]+','abcd1234xyz')
if m:
    print('字符串能够匹配正则表达式:', m.group(0))
else:
    print('字符串不匹配正则表达式')

# 替换字符串
result = re.sub('[0-9]+', '_', 'abc123abc')
print('替换后的字符串为:', result)

输出:

Text Only
1
2
3
查找满足正则表达式的内容: 1234
字符串不匹配正则表达式
替换后的字符串为: abc___abc

3. 时间(time)

Python 内置的时间库使用起来较为复杂,建议只在简单使用时使用。

对时间有复杂处理需求的,请使用第三方arrow库。

Python
1
2
3
4
import time

print('当前时间戳(秒)  :', time.time())
print('当前时间戳(纳秒):', time.time_ns())

输出:

Text Only
1
2
当前时间戳(秒)  : 1662041320.7340803
当前时间戳(纳秒): 1662041320734110181

4. 路径(os.path)

路径库可以方便在处理文件时生成、解析文件路径。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from os import path

p = '/data/sample/file.txt'
print('返回文件名          :', path.basename(p))
print('返回文件目录        :', path.dirname(p))
print('拆分文件目录和文件名:', path.split(p))
print('合并文件目录、文件名:', path.join('/data/sample', 'doc', 'file.txt'))
print('简化路径冗余        :', path.normpath('/data/tmp/../sample/file.txt'))

files = [
    '/data/sample/file.txt',
    '/data/sample/file2.txt',
    '/data/file3.pdf'
]
print('查询文件路径的共同部分:', path.commonprefix(files))

print('检查文件或目录是否存在:', path.exists(p))
print('返回文件大小          :', path.getsize(p))
print('返回上一次读取的时间  :', path.getatime(p))
print('返回上一次修改的时间  :', path.getmtime(p))
print('判断是否为常规文件    :', path.isfile(p))
print('判断是否为目录        :', path.isdir(p))

输出:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
返回文件名          : file.txt
返回文件目录        : /data/sample
拆分文件目录和文件名: ('/data/sample', 'file.txt')
合并文件目录、文件名: /data/sample/doc/file.txt
简化路径冗余        : /data/sample/file.txt
查询文件路径的共同部分: /data/
检查文件或目录是否存在: True
返回文件大小          : 20
返回上一次读取的时间  : 1662041767.7110395
返回上一次修改的时间  : 1662041767.7110395
判断是否为常规文件    : True
判断是否为目录        : False

5. 数学(math)

数学库包含了更多的数学运算相关的处理函数,如果希望使用更高级的数学功能,请使用第三方数学库numpy

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import math

print('自然常数 e:', math.e)
print('圆周率 pi :', math.pi)

print('向上取整:', math.ceil(1.2))
print('向下取整:', math.ceil(1.9))
print('指数运算:', math.pow(2, 10))
print('对数运算:', math.log(1024, 2))
print('取平方根:', math.sqrt(100))

print('弧度转换为角度:', math.degrees(0.25 * math.pi))
print('角度转换为弧度:', math.radians(45))

print('三角函数 sin(参数为弧度) :', math.sin(0.25 * math.pi))
print('三角函数 cos(参数为弧度) :', math.cos(0.25 * math.pi))
print('三角函数 tan(参数为弧度) :', math.tan(0.25 * math.pi))
print('三角函数 asin(参数为弧度):', math.asin(0.25 * math.pi))
print('三角函数 acos(参数为弧度):', math.acos(0.25 * math.pi))
print('三角函数 atan(参数为弧度):', math.atan(0.25 * math.pi))

输出:

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
自然常数 e: 2.718281828459045
圆周率 pi : 3.141592653589793
向上取整: 2
向下取整: 2
指数运算: 1024.0
对数运算: 10.0
取平方根: 10.0
弧度转换为角度: 45.0
角度转换为弧度: 0.7853981633974483
三角函数 sin(参数为弧度) : 0.7071067811865475
三角函数 cos(参数为弧度) : 0.7071067811865476
三角函数 tan(参数为弧度) : 0.9999999999999999
三角函数 asin(参数为弧度): 0.9033391107665127
三角函数 acos(参数为弧度): 0.6674572160283838
三角函数 atan(参数为弧度): 0.6657737500283538

6. 随机(random)

随机库包含了生成各种随机处理函数。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import random

l = [1, 2, 3, 4, 5]
print('返回列表中的一个随机元素 :', random.choice(l))
print('返回列表中的 3 个随机元素:', random.sample(l, 3))

random.shuffle(l)
print('返回列表中的元素随机排序(洗牌):', l)

print('生成一个 [0, 1) 区间的实数               :', random.random())
print('生成一个 [5, 10] 区间的实数              :', random.uniform(5, 10))
print('生成一个 [5, 10] 区间的整数              :', random.randint(5, 10))
print('生成一个 [0, 10) 区间的整数              :', random.randrange(10))
print('生成一个 [5, 10) 区间的整数              :', random.randrange(5, 10))
print('生成一个 [5, 10) 区间(步进为 2)的整数,:', random.randrange(5, 10, 2))

输出:

Text Only
1
2
3
4
5
6
7
8
9
返回列表中的一个随机元素 : 3
返回列表中的 3 个随机元素: [3, 4, 2]
返回列表中的元素随机排序(洗牌): [5, 1, 3, 2, 4]
生成一个 [0, 1) 区间的实数               : 0.6214407642048402
生成一个 [5, 10] 区间的实数              : 9.359073537753634
生成一个 [5, 10] 区间的整数              : 8
生成一个 [0, 10) 区间的整数              : 8
生成一个 [5, 10) 区间的整数              : 6
生成一个 [5, 10) 区间(步进为 2)的整数,: 7

7. Base64(base64)

Base64 库主要用于对数据进行 Base64 的编码和解码。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import base64

s = 'Hello, World。这里是 Python 教程'
b64 = base64.b64encode(s.encode()).decode()
print('对字符串进行 Base64 编码           :', b64)

b64 = 'SGVsbG8sIFdvcmxk44CC6L+Z6YeM5pivIFB5dGhvbiDmlZnnqIs='
s = base64.b64decode(b64.encode()).decode()
print('对字符串进行 Base64 解码           :', s)

s = 'Hello, World。这里是 Python 教程'
b64 = base64.urlsafe_b64encode(s.encode()).decode()
print('对字符串进行 URL 安全的 Base64 编码:', b64)

b64 = 'SGVsbG8sIFdvcmxk44CC6L+Z6YeM5pivIFB5dGhvbiDmlZnnqIs='
s = base64.urlsafe_b64decode(b64.encode()).decode()
print('对字符串进行 URL 安全的 Base64 解码:', s)

b64encode(...)、b64decode(...) 和 urlsafe_b64encode(...)、urlsafe_b64decode(...) 处理方式不同,不要混用

输出:

Text Only
1
2
3
4
对字符串进行 Base64 编码           : SGVsbG8sIFdvcmxk44CC6L+Z6YeM5pivIFB5dGhvbiDmlZnnqIs=
对字符串进行 Base64 解码           : Hello, World。这里是 Python 教程
对字符串进行 URL 安全的 Base64 编码: SGVsbG8sIFdvcmxk44CC6L-Z6YeM5pivIFB5dGhvbiDmlZnnqIs=
对字符串进行 URL 安全的 Base64 解码: Hello, World。这里是 Python 教程

8. 哈希算法(hashlib)

哈希算法库用于对数据进行 MD5、SHA1 等处理。

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import hashlib

s = 'Hello, World。这里是 Python 教程'

h = hashlib.md5()
h.update(s.encode())
print('返回字符串的十六进制 MD5:', h.hexdigest())

h = hashlib.sha1()
h.update(s.encode())
print('返回字符串的十六进制 SHA1:', h.hexdigest())

h = hashlib.sha256()
h.update(s.encode())
print('返回字符串的十六进制 SHA256:', h.hexdigest())

h = hashlib.sha512()
h.update(s.encode())
print('返回字符串的十六进制 SHA512:', h.hexdigest())

输出:

Text Only
1
2
3
4
返回字符串的十六进制 MD5: c2e7c7ebfc834c05b35be14e749651d0
返回字符串的十六进制 SHA1: 30a36af04729d938179fd67a7f4bda6920e5e160
返回字符串的十六进制 SHA256: b5ac91d338061d3a3cfd458b05ea3e15f3b565a18d28f5ee732a3803e381e6fc
返回字符串的十六进制 SHA512: 2c40122b8faf2d72677cafffc7a24756a5d2d9a8a7094e1b82d0bfb0e76b3b491b4347bdaf15332f10c79f05a2ff6ced9b240129b7db47ca632bb65219f4d47a