目录
一:import语句
1.为什么需要 import?
2.四种基本的 import方式
1. 导入整个模块:
2. 导入模块并起别名:
3. 从模块中导入特定的对象(函数/变量/类):
4. 导入模块中的所有内容
3.导入自己写的模块
4.什么是"包"(Package)?
二:常用的标准库模块
1.os库
1.文件路径操作
2.目录操作
3.文件操作
4.环境变量
5.执行系统命令
2.datetime库
1.date
2.time(注意:time对象不支持加减运算。)
3.datetime
4.timedelta
一:import语句
1.为什么需要 import?
在 Python 中,我们通常不会把所有代码写在一个文件里。为了代码复用、结构清晰和团队协作,我们会把功能拆分到不同的文件中。
- 模块(Module):一个 .py文件就是一个模块。
- 包(Package):一个包含多个模块(以及 __init__.py文件)的文件夹就是一个包。
import就是用来把这些模块或包里的功能“拿”到当前文件中使用的命令。
2.四种基本的 import方式
Python中有一个标准库模块 math,提供数学运算功能,以下是四种最常见的导入方式:
1. 导入整个模块:
import math #导入math模块
# 使用模块名作为前缀来调用函数
result = math.sqrt(16)
print(result) # 输出: 4.0
2. 导入模块并起别名:
import math as m #给math库起一个别名。
result = m.sqrt(16)
print(result) # 输出: 4.0
但要注意,给一个库起了别名之后,就不能再用原来的名字了,否则会报错,就像这个样子
import math as m #给math库起一个别名。
result = m.sqrt(16)
print(result) # 输出: 4.0
errorresult = math.sqrt(16)
print(errorresult)
"""输出: Traceback (most recent call last):
File "/Users/m/Desktop/CSDN/1.py", line 5, in <module>
errorresult = math.sqrt(16)
^^^^
NameError: name 'math' is not defined"""
3. 从模块中导入特定的对象(函数/变量/类):
from math import pi
print(pi)#输出:3.141592653589793
注意:如果当前文件里也有一个叫 sqrt的变量,会被覆盖(命名冲突)。就比如说这样子:
pi=1.45
print(pi)#此时pi等于1.45
from math import pi
print(pi)#此时pi等于3.141592653589793
pi=0
print(pi)#此时pi等于0
4. 导入模块中的所有内容
from math import *#相当于:import math.sqrt,math.cos,math.pi…….
print(sqrt(16))
print(cos(0))
但一般来说不推荐使用这种方式,因为这种方式一次性导入了大量的名字,容易造成混淆,托慢代码效率。
3.导入自己写的模块
首先在终端执行以下命令,我用的是Zsh终端,如果操作系统不同的,可以在图形化界面创建,或者使用别的命令:
m@MacBookAir ~ % cd ~/Desktop
m@MacBookAir Desktop % mkdir mymodule
m@MacBookAir Desktop % cd mymodule
m@MacBookAir mymodule % touch main.py utils.py
main.py内容:
import utils
message = utils.greet("Alice")
print(message)
# 或者
from utils import greet
print(greet("Bob"))
utils.py内容:
def greet(name):
return f"Hello, {name}!"
输出结果应该是:
Hello, Alice! Hello, Bob
试一试:修改utils.py,添加一个max(a,b)方法,用户输入两个数值,返回其中大的那一个,然后在main.py调用它 。
4.什么是"包"(Package)?
当模块越来越多,我们就用文件夹来组织它们,这就是包。
包的文件结构大致如下图所示:
my_project/ │ ├── main.py └── my_package/ ├── __init__.py # 告诉 Python 这个文件夹是一个包(有时可省略,但建议保留) ├── module_a.py └── module_b.py
在 main.py中导入包里的模块:
from my_package import module_a
from my_package.module_b import some_function
试一试:修改module_a.py和module_b.py,添加一个分别添加各一个方法,然后在main.py调用它。
二:常用的标准库模块
Python 自带了非常丰富的“标准库”,安装 Python 后即可直接导入使用,无需额外安装,上文我们使用的math,就是Python自带的一个标准库,下面列举几个比较常用的Python的标准库,下面将一一列举讲解:
| 与操作系统交互(创建/删除目录、环境变量) |
| 处理日期、时间、时间差 |
| 基础数学运算(幂、对数、三角函数) |
| 生成随机数、随机抽奖 |
| 访问 Python 解释器变量(如命令行参数) |
| 获取操作系统信息 |
| 在 Python 中运行系统命令(如 ls, ping) |
| 编写专业的命令行工具(解析参数) |
1.os库
os库是 Python 标准库中最基础、最核心的库之一,意思是 Operating System(操作系统)。它提供了一个可移植的方式,让你可以使用 Python 代码来与操作系统进行交互,比如操作文件和文件夹、获取环境变量、执行系统命令等,无论你是在 Windows、macOS 还是 Linux 上运行代码,os库都能帮你屏蔽底层系统的差异。
1.文件路径操作
在处理文件路径时,不同操作系统的分隔符不同(Windows 是 \\`,Linux/macOS 是/),永远不要手动拼接路径字符串,请使用os.path
|
os.path.join() |
智能拼接路径(最常用) |
os.path.join('folder', 'file.txt') |
|
os.path.abspath() |
获取绝对路径 |
os.path.abspath('test.py') |
|
os.path.dirname() |
获取文件所在的目录名 |
os.path.dirname('/a/b/c.txt')→ /a/b |
|
os.path.basename() |
获取文件名(含扩展名) |
os.path.basename('/a/b/c.txt')→ c.txt |
|
os.path.exists() |
判断路径是否存在 |
os.path.exists('./data') |
|
os.path.isfile() |
判断是否是文件 |
os.path.isfile('a.txt') |
|
os.path.isdir() |
判断是否是目录 |
os.path.isdir('docs') |
|
os.path.splitext() |
分离文件名和扩展名 |
os.path.splitext('img.jpg')→ ('img', '.jpg') |
|
os.path.getsize() |
获取文件大小(字节) |
os.path.getsize('a.txt') |
2.目录操作
|
os.getcwd() |
获取当前工作目录 |
os.getcwd() |
|
os.chdir() |
切换当前工作目录 |
os.chdir('../') |
|
os.listdir() |
列出指定目录下的所有文件和文件夹 |
os.listdir('.') |
|
os.mkdir() |
创建单个目录(父目录必须存在) |
os.mkdir('new_folder') |
|
os.makedirs() |
递归创建多级目录 |
os.makedirs('a/b/c') |
|
os.rmdir() |
删除空目录 |
os.rmdir('empty_folder') |
|
os.removedirs() |
递归删除空目录 |
os.removedirs('a/b/c') |
3.文件操作
虽然读写文件内容通常用内置的 open()函数,但 os提供了文件的重命名、删除和权限修改功能:
|
os.rename() |
重命名或移动文件 |
os.rename('old.txt', 'new.txt') |
|
os.remove() |
删除文件 |
os.remove('trash.txt') |
|
os.chmod() |
修改文件权限(Linux/Mac) |
os.chmod('script.sh', 0o755) |
4.环境变量
环境变量是操作系统中的全局键值对,常用于存储数据库密码、API Key 等敏感信息。
|
os.environ |
获取所有环境变量(字典形式) |
os.environ |
|
os.getenv() |
获取指定环境变量(推荐,不存在返回 None) |
os.getenv('HOME') |
|
os.environ['KEY'] |
设置或获取环境变量 |
os.environ['MY_VAR'] = '123' |
5.执行系统命令
|
os.system() |
执行一条系统命令 |
简单粗暴,无法获取命令输出,有安全风险 |
|
os.popen() |
执行命令并获取输出 |
已逐渐被 subprocess取代 |
2.datetime库
datetime是 Python 处理日期和时间的标准库,几乎在所有项目中都会用到——无论是记录日志时间戳、计算任务耗时、还是处理用户的生日或预约时间,都离不开它。
datetime模块里其实包含了几个不同的类:
|
date |
只处理日期 |
年、月、日 |
2026-08-15 |
|
time |
只处理时间 |
时、分、秒、微秒 |
14:30:00 |
|
datetime |
日期 + 时间(最常用) |
年、月、日、时、分、秒 |
2026-08-15 14:30:00 |
|
timedelta |
时间差 |
天、秒、微秒(用于加减运算) |
相差 7 天 3 小时 |
1.date
|
year |
实例属性 |
年份 |
d.year→ 2026 |
|
month |
实例属性 |
月份(1–12) |
d.month→ 8 |
|
day |
实例属性 |
日期(1–31) |
d.day→ 15 |
|
today() |
类方法 |
返回当前本地日期 |
date.today() |
|
fromtimestamp(ts) |
类方法 |
从时间戳创建日期 |
date.fromtimestamp(1784567890) |
|
fromisoformat(s) |
类方法 |
从 ISO 格式字符串解析 |
date.fromisoformat("2026-08-15") |
|
replace() |
实例方法 |
替换指定字段,返回新对象 |
d.replace(year=2030) |
|
strftime(fmt) |
实例方法 |
格式化为字符串 |
d.strftime("%Y/%m/%d") |
|
isoformat() |
实例方法 |
返回 ISO 8601 格式字符串 |
d.isoformat()→ "2026-08-15" |
|
weekday() |
实例方法 |
星期几(周一=0, 周日=6) |
d.weekday()→ 5 |
|
isoweekday() |
实例方法 |
星期几(周一=1, 周日=7) |
d.isoweekday()→ 6 |
|
isocalendar() |
实例方法 |
返回 (年, 第几周, 星期几) |
d.isocalendar()→ (2026, 33, 6) |
|
toordinal() |
实例方法 |
转为 Gregorian 序数日 |
d.toordinal() |
|
min |
类属性 |
最小可表示日期 |
date.min→ 0001-01-01 |
|
max |
类属性 |
最大可表示日期 |
date.max→ 9999-12-31 |
支持的操作:
|
加时间差 |
date(2026, 8, 15) + timedelta(days=7) |
date |
|
减时间差 |
date(2026, 8, 15) – timedelta(days=3) |
date |
|
两日期相减 |
date(2026, 8, 15) – date(2026, 1, 1) |
timedelta |
2.time(注意:time对象不支持加减运算。)
|
hour |
实例属性 |
小时(0–23) |
t.hour→ 14 |
|
minute |
实例属性 |
分钟(0–59) |
t.minute→ 30 |
|
second |
实例属性 |
秒(0–59) |
t.second→ 45 |
|
microsecond |
实例属性 |
微秒(0–999999) |
t.microsecond→ 123456 |
|
tzinfo |
实例属性 |
时区信息(可为 None) |
t.tzinfo |
|
replace() |
实例方法 |
替换指定字段,返回新对象 |
t.replace(hour=9, minute=0) |
|
strftime(fmt) |
实例方法 |
格式化为字符串 |
t.strftime("%H:%M:%S") |
|
isoformat() |
实例方法 |
返回 ISO 格式字符串 |
t.isoformat()→ "14:30:45.123456" |
|
utcoffset() |
实例方法 |
返回时区偏移量 |
t.utcoffset() |
|
dst() |
实例方法 |
返回夏令时调整 |
t.dst() |
|
min |
类属性 |
最小时间 |
time.min→ 00:00:00 |
|
max |
类属性 |
最大时间 |
time.max→ 23:59:59.999999 |
3.datetime
|
year |
实例属性 |
年份 |
dt.year→ 2026 |
|
month |
实例属性 |
月份 |
dt.month→ 8 |
|
day |
实例属性 |
日期 |
dt.day→ 15 |
|
hour |
实例属性 |
小时 |
dt.hour→ 14 |
|
minute |
实例属性 |
分钟 |
dt.minute→ 30 |
|
second |
实例属性 |
秒 |
dt.second→ 45 |
|
microsecond |
实例属性 |
微秒 |
dt.microsecond→ 123456 |
|
tzinfo |
实例属性 |
时区信息 |
dt.tzinfo |
|
now(tz=None) |
类方法 |
返回当前本地日期时间 |
datetime.now() |
|
today() |
类方法 |
返回当前日期时间(无时区) |
datetime.today() |
|
utcnow() |
类方法 |
返回当前 UTC 时间 |
datetime.utcnow() |
|
fromtimestamp(ts, tz=None) |
类方法 |
从时间戳创建 |
datetime.fromtimestamp(1784567890) |
|
strptime(s, fmt) |
类方法 |
按格式解析字符串 |
datetime.strptime("2026-08-15", "%Y-%m-%d") |
|
combine(d, t) |
类方法 |
合并 date + time → datetime |
datetime.combine(date.today(), time(9,0)) |
|
date() |
实例方法 |
提取 date 部分 |
dt.date()→ 2026-08-15 |
|
time() |
实例方法 |
提取 time 部分 |
dt.time()→ 14:30:45.123456 |
|
replace() |
实例方法 |
替换任意字段 |
dt.replace(year=2030, hour=10) |
|
strftime(fmt) |
实例方法 |
格式化为字符串 |
dt.strftime("%Y-%m-%d %H:%M:%S") |
|
isoformat() |
实例方法 |
ISO 8601 格式 |
dt.isoformat() |
|
timestamp() |
实例方法 |
转为时间戳(浮点数秒) |
dt.timestamp() |
|
weekday() |
实例方法 |
星期几(0=周一) |
dt.weekday() |
|
isoweekday() |
实例方法 |
星期几(1=周一) |
dt.isoweekday() |
|
astimezone(tz) |
实例方法 |
转换时区 |
dt.astimezone(timezone.utc) |
支持的操作有:
|
加时间差 |
datetime.now() + timedelta(days=1) |
datetime |
|
减时间差 |
datetime.now() – timedelta(hours=3) |
datetime |
|
两 datetime 相减 |
dt1 – dt2 |
timedelta |
4.timedelta
|
days |
实例属性 |
相差天数(可能为负) |
td.days→ 7 |
|
seconds |
实例属性 |
剩余秒数(0–86399) |
td.seconds→ 3661 |
|
microseconds |
实例属性 |
剩余微秒(0–999999) |
td.microseconds→ 500000 |
|
total_seconds() |
实例方法 |
总秒数(浮点数,含天) |
td.total_seconds()→ 642061.5 |
|
构造参数 |
— |
创建时可传入以下关键字 |
timedelta(weeks=1, days=2, hours=3, minutes=30) |
构造参数一览:
|
weeks |
周数 |
1 week = 7 days |
|
days |
天数 |
— |
|
hours |
小时数 |
1 hour = 3600 seconds |
|
minutes |
分钟数 |
1 minute = 60 seconds |
|
seconds |
秒数 |
— |
|
milliseconds |
毫秒数 |
1 ms = 1000 microseconds |
|
microseconds |
微秒数 |
— |
支持的操作:
|
两个 timedelta 相加 |
td1 + td2 |
timedelta |
|
两个 timedelta 相减 |
td1 – td2 |
timedelta |
|
timedelta × 数字 |
td * 2 |
timedelta |
|
timedelta ÷ 数字 |
td / 2 |
timedelta |
|
timedelta ÷ timedelta |
td1 / td2 |
float(倍数) |
|
取绝对值 |
abs(td) |
timedelta |
|
比较大小 |
td1 > td2 |
bool |


