bytes
bytes()
创建 bytes
对象
1 | byte_data = bytes("hello", "utf-8") |
fromhex()
将十六进制字符串转换为字节序列。
1 | hex_str = "48656c6c6f20576f726c64" # "Hello World" 的十六进制表示 |
hex()
将字节序列转换为十六进制字符串。
1 | byte_data = b'Hello World' |
decode()
字节序列转字符串
1 | byte_data = b'hello' |
int
to_bytes
from_byte
String
字符串拼接
使用+
运算符可以将多个字符串拼接起来
1 | str1 = "Hello" |
slice(切片)
1 | str[start:end:step] |
字符串方法
join
1 | string.join(iterable) |
示例
1 | result = ', '.join(['Hello', 'World']) |
lower
1 | string.lower() |
upper
1 | string.upper() |
replace
用于替换字符串中的指定子字符串。
1 | str.replace(old, new[, count]) |
split()
用于将字符串分割成多个子字符串,返回一个列表。
1 | str.split(sep=None, maxsplit=-1) |
示例
1 | text = "Hello world, welcome to Python." |
encode()
decode()
format()
字符串格式化
%格式化
f-s
List
列表的方法
append()
添加元素,在末尾添加
extend()
合并列表
Dict
字典的创建方式
直接定义
1
2
3mydict = {} # 创建空字典
my_dict = {'key1': 'value1', 'key2': 'value2'}
print(my_dict) # {'key1': 'value1', 'key2': 'value2'}使用
dict()
构造函数1
2
3mydict = dict() # 空字典
my_dict = dict(key1='value1',key2='value2',key3='value3')
print(my_dict) # {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}键值对序列
1
2
3
4
5
6
7
8
9tuple1 = ("key1","value1")
tuple2 = ("key2","value2")
tuple3 = ("key3","value3")
my_list = list()
my_list.append(tuple1)
my_list.append(tuple2)
my_list.append(tuple3)
my_dict = dict(my_list)
print(my_dict) # {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
访问字典
通过key来获取value
1
2my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(my_dict["key1"]) # value1添加元素
1
2
3mydict = {}
mydict["key1"]="value1"
print(mydict) # {'key1': 'value1'}修改元素
1
2
3
4mydict = {}
mydict["key1"]="value1"
mydict["key1"]="new_value1"
print(mydict) # {'key1': 'new_value1'}删除元素
1
2
3
4mydict = {}
mydict["key1"]="value1"
del mydict["key1"]
print(mydict) # {}删除字典
1
2
3mydict = {}
mydict["key1"]="value1"
del mydict
字典方法
clear()
清空字典,使之变成一个空字典。
1 | dict.clear() |
keys()
返回一个包含字典中所有键的对象
1 | my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} |
values()
1 | dict.values() |
返回一个包含字典中所有值的对象
1 | my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} |
items()
1 | dict.values() |
返回一个包含字典中所以键值对的对象
1 | my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} |
update()
将一个字典的键值对更新到另一个字典中。
1 | dict.update([other]) |
示例
字典
1 | dict1 = {"key1":"value1"} |
元组列表
1 | dict1 = {"key1":"value1"} |
键值对列表
1 | dict1 = {"key1":"value1"} |
pop()
移除字典中的一个元素,并返回该元素的值。
1 | dict.pop(key) |
示例
1 | my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'} |
File I/O
open()
1 | file = open(file, mode='r') |
mode
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
+ | 打开一个文件进行更新(可读可写)。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
b | 二进制模式。(与r、w、a组合使用) |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
close()
关闭文件。
1 | file.close() |
1 | # 以只读模式 ("r") 打开名为 "example.txt" 的文件 |
read
read()
读取整个文件
1 | content = file.read(size) |
readline()
读取一行
1 | file.readline() |
readlines()
读取所有行,返回列表
1 | file.readlines() |
write
write()
1 | file.write(string) |
writelines()
1 | file.writelines(lines) |
flush()
刷新缓冲区
1 | file.flush() |
tell()
返回文件指针当前位置。
1 | fileObject.tell() |
seek()
移动文件读取指针到指定位置。
1 | file.seek(offset, whence) |
offset
开始的偏移量,也就是代表需要移动偏移的字节数
whence
可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
random
seed()
random.seed()
用于初始化随机数生成器的种子(Seed)。它的主要作用是让伪随机数的生成过程可预测,从而在不同的运行环境下产生相同的随机序列。
1 | import random |
random.seed(42)
设定了随机数种子为 42
。
之后调用 random.random()
和 random.randint()
会得到固定的值。
只要种子值相同,每次运行时生成的随机序列也相同。
1 | random.seed(a=None, version=2) |
random()
random.random()
用于生成一个 [0.0, 1.0) 之间的浮点数(包括 0.0,但不包括 1.0)。
1 | import random |
randint()
random.randint(a, b)
用于生成一个在 [a, b]
之间的随机整数,**包括 a
和 b
**。
1 | import random |
uniform()
random.uniform(a, b)
用于生成一个在 [a, b]
或 [b, a]
之间的随机浮点数,包括 a
和 b
(即闭区间)。
1 | import random |
randbytes()
random.randbytes()
用于生成指定长度的随机字节序列(bytes
对象)。这是 Python 3.9 版本引入的功能。
1 | random.randbytes(n) |
choice()
用于从非空序列中随机选择一个元素,序列可以是任何可迭代的对象(如列表、元组、字符串等)。
1 | random.choice(seq) |
shuffle()
random.shuffle(seq)
用于 随机打乱可变序列(如列表)中的元素顺序。该方法会直接修改原始序列,而不是返回一个新的序列。
1 | random.shuffle(seq) |
示例用法
1 | import random |
sample()
random.sample(seq, k)
用于 从序列 seq
中随机选择 k
个不重复的元素,并返回一个新列表。这个方法不会修改原始序列。
1 | random.sample(seq, k) |
示例用法
1 | import random |
binascii
urllib
parse
quote()
用于对字符串进行 URL 编码。
1 | urllib.parse.quote(string, safe='/', encoding=None, errors=None) |
unquote()
用于 对字符串进行URL 解码。
1 | urllib.parse.unquote(string, encoding='utf-8', errors='replace') |
requests
request()
requests.request()
是 requests
库中最底层、最通用的 HTTP 请求方法。它允许你通过传入不同的 HTTP 方法(如 GET
、POST
、PUT
、DELETE
等)来构造请求,内部所有的专用方法(如 requests.get()
、requests.post()
等)其实都是对 requests.request()
的简单封装。
1 | requests.request(method, url, **kwargs) |
get()
requests.get()
用于向指定 URL 发送 GET 请求,从服务器获取数据。
1 | response = requests.get(url, params=None, **kwargs) |
示例
1 | params = {"q": "python教程", "page": 1} |
post()
requests.post()
方法用于向服务器发送 HTTP POST 请求。与 GET 请求不同,POST 请求通常用于向服务器提交数据(如表单数据、JSON 数据、文件上传等),数据内容被放在请求体(body)中。
1 | response = requests.post(url, data=None, json=None, headers=None, params=None, files=None, auth=None, timeout=None, **kwargs) |
使用 data
参数提交表单数据时,数据会以 URL 编码格式发送;使用 json
参数提交数据时,数据会自动转换为 JSON 字符串,并设置 Content-Type: application/json
。
Response对象
Response 对象是 Python requests 库中用来表示服务器响应的核心对象。每当你使用 requests.get()、requests.post() 等方法发送 HTTP 请求时,返回的就是一个 Response 对象,它包含了服务器返回的所有信息,例如状态码、响应头、响应体、Cookies 以及请求相关的信息等。
status_code
表示 HTTP 响应的状态,如 200(成功)、404(资源未找到)、500(服务器错误)等。
headers
是一个字典,存储了服务器返回的所有 HTTP 响应头信息,如 Content-Type、Content-Encoding 等。
响应体
有两种常用形式
text:
经过编码(通常基于响应头中指定的 charset 或通过 apparent_encoding 计算)解码后的字符串数据,适合处理文本内容。
content:
原始的二进制数据
Cookies
Response 对象的 cookies 属性是一个 RequestsCookieJar 对象,用于存储服务器返回的 Cookie。
json()
用于将响应体内容解析为 JSON 格式并返回对应的 Python 对象(通常是字典或列表)。如果响应内容不是合法的 JSON,则会抛出异常。
close()
用于关闭响应连接,尤其在使用流式请求(stream=True)时显得尤为重要。
re
正则表达式
常用匹配规则
元字符
模式 | 描述 |
---|---|
. | 匹配任意单个字符(除换行符)。 |
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾。 |
* | 匹配前一个字符0次或多次。 |
+ | 匹配前一个字符1次或多次。 |
? | 匹配前一个字符0次或1次。 |
{n} | 精确匹配前一个字符 n 次。 |
{n,} | 匹配前一个字符至少 n 次。 |
{n,m} | 匹配前一个字符 n 到 m 次。 |
字符类
模式 | 描述 |
---|---|
[abc] |
匹配字符 “a”、”b” 或 “c”。 |
[a-z] |
匹配所有小写字母。 |
[^abc] |
匹配除 “a”、”b” 和 “c” 之外的任意字符。 |
预定义字符类
模式 | 描述 |
---|---|
\d |
匹配任意数字,等价于 [0-9]。 |
\D |
匹配任意非数字。 |
\w |
匹配字母、数字或下划线,等价于 [a-zA-Z0-9_]。 |
\W |
匹配非字母、数字和下划线。 |
\s |
匹配空白字符,包括空格、制表符等。 |
\S |
匹配非空白字符。 |
分组和引用
模式 | 描述 |
---|---|
() | 用于分组,可以将一部分模式看作一个整体 |
| | 匹配左边或右边的表达式。 |
\1, \2,… | 反向引用,用于引用分组匹配的内容。 |
match object(匹配对象)
匹配对象是 re.Match 类型的实例,可以通过该对象访问有关匹配的信息。
属性
lastindex
返回正则表达式中最后一个分组的索引。如果没有分组,则返回 None。
lastgroup
返回最后一个匹配的分组名称(如果正则表达式使用了命名分组)。如果没有使用命名分组,则返回 None。
方法
group()
- 返回整个匹配的字符串(即正则表达式匹配到的内容)。
- 如果正则表达式包含分组(用圆括号 () 包围的部分),可以通过 group() 方法传入一个数字来返回特定分组的匹配内容。
start()
返回匹配的起始位置(索引),即匹配字符串的第一个字符在原始字符串中的位置。
end()
返回匹配的结束位置(索引),即匹配字符串的最后一个字符后面的索引。注意,这个位置是匹配的结束位置的下一个位置。
span()
返回一个元组 (start, end),分别表示匹配的起始位置和结束位置。
groups()
返回所有分组的元组(不包括整个匹配的字符串),如果正则表达式没有分组,则返回一个空元组 ()。
groupdict()
如果正则表达式使用了命名分组,groupdict() 会返回一个字典,键为分组名称,值为对应分组的匹配内容。否则,返回一个空字典。
match()
从字符串的起始位置开始匹配正则表达式 pattern,如果匹配成功,返回一个匹配对象;如果不匹配,返回 None。
1 | re.match(pattern, string) |
search()
在整个字符串中搜索匹配正则表达式 pattern 的部分,只要找到了第一个匹配项就返回匹配对象,否则返回 None。
1 | re.search(pattern, string) |
findall()
查找所有匹配 pattern 的部分,并返回一个列表。如果没有匹配项,则返回空列表。
1 | re.findall(pattern, string) |
finditer()
与 findall 类似,但是返回的是一个迭代器,每个元素是一个匹配对象。
1 | re.finditer(pattern, string) |
sub()
用 repl 替换字符串中所有匹配 pattern 的部分,返回替换后的新字符串。
1 | re.sub(pattern, repl, string) |
split()
根据正则表达式 pattern 将字符串分割成多个部分,返回一个列表。
1 | re.split(pattern, string) |
struct
unpack()
将 二进制数据 解析为 Python 数据类型
1 | struct.unpack(format, buffer) |
- **
format
**:格式字符串,定义二进制数据的解析规则(如数据类型、字节序)。 - **
buffer
**:包含二进制数据的字节对象(如bytes
,bytearray
)。 - 返回值:返回一个 元组,包含解析后的数据。
格式字符串
字节序指令(可选,默认按系统原生顺序):
符号 | 说明 |
---|---|
@ |
原生字节序 + 原生对齐(默认) |
= |
原生字节序 + 标准大小 |
< |
小端序(低位在前) |
> |
大端序(高位在前) |
! |
网络序(大端序) |
数据类型指令:
符号 | C 类型 | Python 类型 | 字节数 |
---|---|---|---|
b |
char |
int |
1 |
B |
unsigned char |
int |
1 |
h |
short |
int |
2 |
H |
unsigned short |
int |
2 |
i |
int |
int |
4 |
I |
unsigned int |
int |
4 |
q |
long long |
int |
8 |
Q |
unsigned long long |
int |
8 |
f |
float |
float |
4 |
d |
double |
float |
8 |
s |
char[] |
bytes |
1 per char |
time
time()
返回当前时间的时间戳。时间戳是从1970年1月1日00:00:00 UTC开始的秒数。
1 | time.time() |
调用示例
1 | import time |
json
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人和机器阅读和解析。它基于JavaScript的对象表示法,但被广泛用于多种编程语言。
JSON中的数据类型
- 字符串(String):用双引号包围,如 “Hello, World!”。
- 数字(Number):如 123、3.14,无引号。
- 布尔值(Boolean):true 或 false。
- 数组(Array):如 [1, 2, “abc”, true]。
- 对象(Object):如 {“name”: “Alice”, “age”: 30}。
- 空值(Null):表示空,如 null。
JSON的基本语法
- 数据在键值对中:每个键值对由键和值组成,格式为 “key”: value。
- 数据由逗号分隔:多个键值对之间使用逗号分隔。
- 对象由花括号 {} 包围:表示一个无序的键值对集合。
- 数组由方括号 [] 包围:表示一个有序的值的集合。
- 键 必须是字符串(用双引号包裹),值 可以是字符串、数字、布尔值、数组、对象或 null。
JSON示例
1 | { |
load()
- 从文件对象读取 JSON 格式的数据并将其解析为 Python 对象。
- 用于直接从文件中加载 JSON 数据。
1 | import json |
loads()
- 从字符串中解析 JSON 格式的数据并将其转换为 Python 对象。
- 用于从 JSON 字符串中加载数据。
1 | import json |
dump()
- 将 Python 对象转换为 JSON 格式,并将其写入到文件中。
- 用于将 JSON 数据保存到文件。
1 | import json |
dumps()
- 将 Python 对象转换为 JSON 格式的字符串。
- 用于在程序中将 Python 对象转换为 JSON 字符串以便于传输或输出。
1 | import json |
uuid
uuid
库用于生成通用唯一标识符(UUID)。UUID 是 128 位的唯一标识符,通常用于标记对象、数据或会话,以确保唯一性。
uuid1
基于时间戳和主机 MAC 地址生成。
示例
1 | import uuid |
uuid4
完全基于随机数生成。
示例
1 | u4 = uuid.uuid4() |
Crypto
Problem
No module named “Crypto”
安装pycryptodome
1 | pip install pycryptodome |
pycryptodome
是crypto
的延伸版本,用法和crypto
是一模一样的,可以完全替代crypto
。
如果上述方法仍不能解决问题,可以找到 python 下面的\Lib\site-packages
,手动将crypto
改为Crypto
。
Jupyter notebook
安装与启动
在终端执行如下命令进行安装
1 | pip install notebook |
在终端输入如下命令进行启动
1 | jupyter notebook |
会在浏览器打开Jupyter
,选择一个目录新建文件,编写代码
在终端执行Ctrl + C
命令停止服务