
文章目录
一、模块的下载(pip)
pip是python解释器自带的下载包插件,使用命令可以下载需要的模块。
1.模块的基本安装命令
| 功能 | 命令 |
|---|---|
| 安装新包 | pip install <包名> |
| 安装本地包 | pip install <目录>/<文件名> |
| 升级包 | pip install <包名> --upgrade |
| 卸载包 | pip uninstall <包名> |
| 查看已安装的包 | pip list |
| 导出已经安装的模块到requirements.txt | pip freeze >requirements.txt |
| 安装requirements.txt里的所有包 | pip install -r requirements.txt |
2.更换国内源
由于国外源下载速度较慢,因此更换国内源可以提高速率
1.常用的国内源
python
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
2.临时修改国内源
在使用pip的时候在后面加上-i参数,指定pip源
python
pip install <包名> -i https://pypi.tuna.tsinghua.edu.cn/simple
3.多个版本的python环境干扰
当有python2和python3环境干扰时候,出现
Fatal error in launcher: Unable to create process using
解决办法:
python2 -m pip install <包名>
或者
python3 -m pip install <包名>
4.快速搭建环境
问题:当我们去了一个新公司,想要项目跑起来,需要搭配项目所需要的环境,但是版本的差异可能会影响项目的运行
1.安装pipreqs
pip install pipreqs
2.在项目中生成当前项目所有模块的下载清单
例如对上次文件项目,生成清单,命令行运行
pipreqs ./

3.按清单安装模块
pip install -r requirements.txt
二、os模块:文件、目录和路径操作
os 模块主要用于操作文件、目录和系统路径,使用前需要先导入:
python
import os
1.文件操作
| 方法 | 说明 | 示例 |
|---|---|---|
os.rename() |
重命名文件或目录 | os.rename("1.txt", "2.txt") |
os.remove() |
删除文件 | os.remove("test.txt") |
python
import os
# 将 1.txt 重命名为 2.txt
os.rename("1.txt", "2.txt")
# 删除 test.txt
os.remove("test.txt")
以上方法执行成功时没有返回结果;如果文件不存在,会抛出 FileNotFoundError。
2.目录操作
| 方法 | 说明 | 示例 |
|---|---|---|
os.mkdir() |
创建单级目录 | os.mkdir("dir1") |
os.rmdir() |
删除空目录 | os.rmdir("dir1") |
os.makedirs() |
递归创建多级目录 | os.makedirs("dir1/dir2") |
os.removedirs() |
递归删除空目录 | os.removedirs("dir1/dir2") |
os.getcwd() |
获取当前工作目录 | os.getcwd() |
os.chdir() |
修改当前工作目录 | os.chdir("E:/") |
os.listdir() |
获取目录中的文件和目录 | os.listdir(".") |
1. 创建和删除目录
python
import os
os.mkdir("dir1") # 创建单级目录
print(os.path.exists("dir1")) # 输出:True
os.rmdir("dir1") # 删除空目录
print(os.path.exists("dir1")) # 输出:False
创建多级目录:
python
import os
path = os.path.join("dir1", "dir2")
os.makedirs(path)
print(os.path.exists(path)) # 输出:True
如果目录可能已经存在,可以设置 exist_ok=True:
python
os.makedirs(path, exist_ok=True)
删除多级空目录:
python
os.removedirs(path)
print(os.path.exists(path)) # 输出:False
os.removedirs()会继续尝试删除上层空目录,使用时需要谨慎。
2. 获取和修改工作目录
python
import os
print(os.getcwd()) # 示例输出:E:\python\文件操作
os.chdir("E:/")
print(os.getcwd()) # 示例输出:E:\
工作目录是程序处理相对路径时使用的起点,不一定等于当前 Python 文件所在目录。
3. 查看目录内容
python
import os
result = os.listdir(".")
print(result) # 示例输出:['test.py', '1.txt', 'images']
返回结果是列表,只包含文件或目录名称,不包含完整路径。
3.路径判断
| 方法 | 说明 | 返回值 |
|---|---|---|
os.path.exists(path) |
判断路径是否存在 | bool |
os.path.isfile(path) |
判断路径是否为文件 | bool |
os.path.isdir(path) |
判断路径是否为目录 | bool |
os.path.isabs(path) |
判断是否为绝对路径 | bool |
假设当前目录中存在 test.py 文件和 images 目录:
python
import os
print(os.path.exists("test.py"))
# 输出:True
print(os.path.isfile("test.py"))
# 输出:True
print(os.path.isdir("test.py"))
# 输出:False
print(os.path.isdir("images"))
# 输出:True
判断绝对路径:
python
import os
print(os.path.isabs("test.py"))
# 输出:False
print(os.path.isabs(r"E:\python\test.py"))
# 输出:True
print(os.path.isabs(os.getcwd()))
# 输出:True
4.路径处理
| 方法 | 说明 | 示例 |
|---|---|---|
os.path.abspath() |
获取绝对路径 | os.path.abspath("test.py") |
os.path.basename() |
获取路径的最后一部分 | os.path.basename(path) |
os.path.dirname() |
获取路径的目录部分 | os.path.dirname(path) |
os.path.join() |
拼接路径 | os.path.join("dir1", "test.txt") |
os.path.split() |
分割目录和最后一部分 | os.path.split(path) |
os.path.splitext() |
分割文件路径和扩展名 | os.path.splitext(path) |
os.path.commonprefix() |
按字符获取公共前缀 | os.path.commonprefix(paths) |
os.path.commonpath() |
获取有效公共路径 | os.path.commonpath(paths) |
1. 获取绝对路径
python
import os
path = os.path.abspath("test.py")
print(path)
# 示例输出:E:\python\文件操作\test.py
输出结果与当前工作目录有关。
2. 获取文件名和目录
python
import os
path = r"E:\python\文件操作\test.py"
print(os.path.basename(path)) # 输出:test.py
print(os.path.dirname(path)) # 输出:E:\python\文件操作
basename() 获取最后一部分,dirname() 获取最后一部分之前的路径。
3. 分割路径
python
import os
path = r"E:\python\文件操作\test.py"
print(os.path.split(path)) # 输出:('E:\\python\\文件操作', 'test.py')
print(os.path.splitext(path)) # 输出:('E:\\python\\文件操作\\test', '.py')
| 方法 | 分割结果 |
|---|---|
os.path.split() |
目录部分和最后一部分 |
os.path.splitext() |
文件路径和扩展名 |
4. 拼接路径
不推荐直接使用字符串拼接路径:
python
# 不推荐
path = "dir1" + "/" + "test.txt"
推荐使用 os.path.join():
python
import os
path = os.path.join("dir1", "dir2", "test.txt")
print(path)
# Windows 示例输出:dir1\dir2\test.txt
os.path.join() 会根据当前操作系统使用合适的路径分隔符。
5. 获取公共路径
commonprefix() 按字符比较:
python
import os
paths = ["111123", "113", "13242"]
print(os.path.commonprefix(paths)) # 输出:1
处理真实文件路径时,更推荐 commonpath():
python
import os
paths = [
r"E:\python\project\a.txt",
r"E:\python\project\images\b.png"
]
print(os.path.commonpath(paths)) # 输出:E:\python\project
| 方法 | 比较方式 | 结果特点 |
|---|---|---|
commonprefix() |
按字符串字符比较 | 结果不一定是有效路径 |
commonpath() |
按路径结构比较 | 返回有效公共路径 |
5.获取当前 Python 文件路径
__file__ 表示当前 Python 文件的路径。
假设当前文件是 E:\python\文件操作\test.py:
python
import os
print(__file__)
# 示例输出:E:\python\文件操作\test.py
print(os.path.basename(__file__))
# 输出:test.py
print(os.path.dirname(__file__))
# 示例输出:E:\python\文件操作
print(os.path.abspath(__file__))
# 示例输出:E:\python\文件操作\test.py
获取当前文件所在目录:
python
current_dir = os.path.dirname(os.path.abspath(__file__))
print(current_dir)
# 示例输出:E:\python\文件操作
需要注意:在某些交互式环境中,例如部分 Notebook 或 Python 交互终端,__file__ 可能不存在。
6.Windows 路径写法
Windows 路径中的反斜杠可能被识别为转义字符。
不推荐:
python
path = "E:\new\test.txt"
其中 \n 和 \t 可能分别被识别为换行和制表符。
推荐以下写法:
python
# 原始字符串
path1 = r"E:\new\test.txt"
# 双反斜杠
path2 = "E:\\new\\test.txt"
# 正斜杠
path3 = "E:/new/test.txt"
# os.path.join()
path4 = os.path.join("E:/", "new", "test.txt")
python
print(path1) # E:\new\test.txt
print(path2) # E:\new\test.txt
print(path3) # E:/new/test.txt
print(path4) # E:/new\test.txt
最后一个结果的分隔符形式与系统和传入路径有关,但它仍然是有效路径。
7.注意事项
| 注意点 | 说明 |
|---|---|
os.remove() |
只能删除文件,不能删除目录 |
os.rmdir() |
只能删除空目录 |
os.removedirs() |
会继续尝试删除上层空目录,使用时要谨慎 |
os.mkdir() |
不能直接创建不存在的多级目录 |
os.makedirs() |
可以递归创建多级目录 |
os.getcwd() |
获取工作目录,不一定是代码文件目录 |
os.path.exists() |
路径不存在时返回 False,不会报错 |
commonprefix() |
按字符比较,结果不一定是有效路径 |
| 删除和重命名 | 操作前建议先判断路径是否存在 |
安全删除文件:
python
import os
path = "test.txt"
if os.path.isfile(path):
os.remove(path)
print("文件删除成功")
else:
print("文件不存在")
示例输出:
text
文件删除成功
三、random模块:随机数、随机抽取和打乱顺序
使用前需要先导入:
python
import random
random生成的是伪随机数,适合模拟、抽奖和测试等普通场景,不适合生成密码、验证码或安全令牌。安全场景应使用secrets模块。
1.常用函数
| 函数 | 作用 | 返回值 |
|---|---|---|
random.random() |
生成 [0.0, 1.0) 范围内的随机浮点数 |
float |
random.randint(a, b) |
生成 [a, b] 范围内的随机整数 |
int |
random.randrange(start, stop, step) |
从指定整数序列中随机选择一个值 | int |
random.uniform(a, b) |
生成 a 和 b 之间的随机浮点数 |
float |
random.choice(seq) |
从非空序列中随机选择一个元素 | 单个元素 |
random.choices(seq, k=n) |
有放回地随机抽取多个元素,结果可能重复 | list |
random.sample(seq, k=n) |
无放回地随机抽取多个不重复元素 | list |
random.shuffle(list) |
原地打乱列表顺序 | None |
random.seed(value) |
设置随机种子,使结果可以复现 | None |
2.特殊函数举例
1. randint()
randint(a, b) 生成包含两端的随机整数,只接收开始值和结束值,不支持步长
python
import random
result = random.randint(1, 10)
print(result)
# 示例输出:1
2. randrange()
randrange() 的参数采用左闭右开区间。
| 写法 | 取值范围 |
|---|---|
randrange(stop) |
从 0 到 stop - 1 |
randrange(start, stop) |
从 start 到 stop - 1 |
randrange(start, stop, step) |
从指定步长序列中随机取值 |
python
import random
print(random.randrange(10))
# 示例输出:8
result = random.randrange(1, 10, 2)
print(result)
# 示例输出:3
3. choice()
choice() 从非空序列中随机选择一个元素,可以用于列表、元组和字符串。
如果传入空序列,会抛出 IndexError
python
import random
print(random.choice([1, 2, 3, 4, 5]))
# 示例输出:2
print(random.choice(("张三", "李四", "王五")))
# 示例输出:李四
print(random.choice("Python"))
# 示例输出:h
4. choices()
choices() 进行有放回抽取,同一个元素可能被抽中多次。
python
import random
result = random.choices([1, 2, 3], k=5)
print(result)
# 示例输出:[3, 2, 3, 1, 3]
设置权重:
python
result = random.choices(
[1, 2, 3],
weights=[1, 2, 3],
k=5
)
print(result)
# 示例输出:[3, 2, 3, 3, 1]
权重表示相对抽中概率:
| 元素 | 权重 | 相对概率 |
|---|---|---|
1 |
1 |
1/6 |
2 |
2 |
2/6 |
3 |
3 |
3/6 |
权重越大,被抽中的概率越高,但不能保证每次结果都符合固定比例。
也可以使用累计权重 cum_weights:
python
result = random.choices(
[1, 2, 3],
cum_weights=[1, 3, 6],
k=5
)
weights 和 cum_weights 不能同时使用。
5. sample()
sample() 进行无放回抽取,结果中的元素不会重复。
python
import random
result = random.sample([1, 2, 3, 4], k=4)
print(result) # 示例输出:[3, 1, 4, 2]
k 不能大于序列中可选元素的数量,否则会抛出 ValueError:
python
# random.sample([1, 2, 3], k=4)
choice、choices 和 sample 对比
| 函数 | 抽取数量 | 是否可能重复 | 是否支持权重 |
|---|---|---|---|
choice() |
1 个 | - | 否 |
choices() |
多个 | 可能重复 | 是 |
sample() |
多个 | 不重复 | 否 |
6.shuffle()
shuffle() 的参数必须是可修改序列,通常使用列表。会直接修改原列表,不会生成新列表,返回值始终是 None。
python
import random
list01 = [1, 2, 3, 4, 5]
result = random.shuffle(list01)
print(list01) # 示例输出:[3, 1, 4, 2, 5]
print(result) # 输出:None
四、time模块
1.时间模块转换图

2.时间模块转换举例
1.获取时间戳
python时间戳取整为10位,单位为s
python
import time
print(time.time()) # 1621235477.11
print(int(time.time())) # 1621235477
2.休眠
程序停止运行x秒
python
time.sleep(3)
3.获取时间元组
python
#显示当前时间的时间元组
print(time.localtime())
print(time.localtime(time.time())) # 同time.localtime()

python
#显示一个小时前的时间元组
print(time.localtime(time.time()-3600))

python
# 显示utc时间的时间元组
print(time.gmtime())

4.时间元组与其他格式的相互转换
时间元组 → 格式化时间
python
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
# 2021-05-17 15:17:32
格式化时间 → 时间元组
python
time.strptime('2021-05-17 15:17:32','%Y-%m-%d %H:%M:%S')
时间元组 → 时间戳
python
print(time.mktime(t)) # 1621235956.0
时间戳格式 → 时间元组
python
print(time.localtime(time.time())) # 获取时间戳
# time.struct_time(tm_year=2022, tm_mon=1, tm_mday=14, tm_hour=15, tm_min=1, tm_sec=24, tm_wday=4, tm_yday=14, tm_isdst=0)
例:
python
# --------------将时间戳转为格式化时间
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 2023-05-09 17:39:5
# ------------将格式化时间转为时间戳
print(time.mktime(time.strptime('2023-05-09 17:39:54', '%Y-%m-%d %H:%M:%S')))
# 1683625194.0
3.结构化时间
| 符号 | 含义 |
|---|---|
| %y | 两位数的年份表示(00-99) |
| %Y | 四位数的年份表示(0000-9999) |
| %m | 月份(01-12) |
| %d | 月内中的一天(0-31) |
| %H | 24小时制小时数(0-23) |
| %I | 12小时制小时数(01-12) |
| %M | 分钟数(00-59) |
| %S | 秒(00-59) |
| %a | 本地简化星期名称 |
| %A | 本地完整星期名称 |
| %b | 本地简化的月份名称 |
| %B | 本地完整的月份名称 |
| %c | 本地相应的日期表示和时间表示 |
| %j | 年内的一天(001-366) |
| %p | 本地A.M.或P.M.的等价符 |
| %U | 一年中的星期数(00-53)星期天为星期的开始 |
| %w | 星期(0-6),星期天为星期的开始 |
| %W | 一年中的星期数(00-53)星期一为星期的开始 |
| %x | 本地相应的日期表示 |
| %X | 本地相应的时间表示 |
| %Z | 当前时区的名称 |
| %% | %号本身 |
python
def format_Date1(date):
import datetime
time_format = str(datetime.datetime.strptime(date, '%b %d, %Y, %H:%M:%S'))
return time_format
print(format_Date1('Dec 4, 2019, 4:25:41'))
结果:

五、json模块
json内置模块用于在 Python 数据类型 和 JSON 字符串/文件 之间进行转换。- JSON 常用于接口数据、配置文件、前后端数据传输和简单数据存储。
- JSON 本质上是一种字符串格式,但它有固定的数据规则。
- JSON 字符串必须用双引号
1.四个常见方法
| 方法 | 作用 | 返回值 |
|---|---|---|
json.dumps(list/dict) |
Python 对象转 JSON 字符串 | json字符串 |
json.loads(json字符串) |
JSON 字符串转 Python 对象 | dict、list 等 |
json.dump(list/dict,fp) |
Python 对象写入 JSON 文件 | None |
json.load(fp) |
从 JSON 文件读取 Python 对象 | python的list或者dict |
2.举例使用
python
import json
data = {
"name": "张三",
"age": 18,
"is_vip": True,
"hobby": ["python", "爬虫"],
"address": None
}
json_str = json.dumps(data)
print(json_str)
print(type(json_str))
输出:
python
{"name": "\u5f20\u4e09", "age": 18, "is_vip": true, "hobby": ["python", "\u722c\u866b"], "address": null}
<class 'str'>
- 中文默认会被转义成 Unicode,如果希望中文正常显示,可以设置
json.dumps(data, ensure_ascii=False) - 如果希望格式更整齐,可以设置格式化缩进
json.dumps(data, ensure_ascii=False, indent=4)
3.一些注意事项
- Python的 dict中的非字符串key被转换成JSON字符串时都会被转换为小写字符串;
- Python中的tuple,在序列化时会被转换为array,但是反序列化时,array会被转化为list;
- 对于Python内置的数据类型(如:str, unicode, int, float, bool, None, list, tuple, dict)json模块可以直接进行序列化/反序列化处理;