一、进阶语法
1.1 导入模块 / 包
python
# 方式1:导入整个模块
import math # 数学模块
print(math.sqrt(16)) # 计算平方根,输出:4.0
# 方式2:导入模块中的指定函数/变量
from math import pi, pow
print(pi) # 输出:3.141592653589793
print(pow(2, 3)) # 2的3次方,输出:8.0
# 方式3:导入并起别名
import numpy as np # 第三方数据分析库,常用别名
1.2 常用内置模块
1.2.1 math
常用函数:
math.sqrt(x):平方根
math.pow(x,y):x 的 y 次方
math.ceil(x):向上取整
math.floor(x):向下取整
1.2.2 datetime
datetime.datetime.now():当前时间
datetime.date.today():当前日期
datetime.timedelta():时间间隔(加减)
datetime.strptime():字符串转日期
datetime.strftime():日期转字符串
1.2.3 random
常用函数:
random.random():0-1 随机浮点数
random.randint(a,b):a-b 随机整数
random.choice(iter):随机选一个元素
random.shuffle(iter):打乱序列
1.2.4 os
常用函数:
os.path.exists(path):判断路径是否存在
os.mkdir(path):创建文件夹
os.listdir(path):列出目录文件
os.remove(path):删除文件
os.path.join(a, b):拼接路径(跨平台)
os.path.abspath(path):绝对路径
os.path.basename(path):获取文件名
os.path.splitext(path):分割文件名和后缀
1.2.5 re
常用函数:
re.search(pattern, s):查找第一个匹配
re.findall(pattern, s):查找所有匹配
re.match(pattern, s):从开头匹配
re.sub(pattern, repl, s):替换匹配内容
1.3 异常处理
python
# 示例:处理用户输入非数字的情况
try:
num = int(input("请输入一个数字:"))
print(f"你输入的数字是:{num}")
except ValueError: # 捕获"类型转换失败"的异常
print("错误:你输入的不是数字!")
except Exception as e: # 捕获所有其他异常(兜底)
print(f"发生未知错误:{e}")
else: # 无异常时执行
print("输入成功!")
finally: # 无论是否有异常,都会执行(比如关闭文件/连接)
print("程序执行完毕")
1.4 列表推导式
python特有的:
快速创建 / 过滤列表,代码更简洁;
效率略高于普通 for 循环(底层优化)
python
# 普通循环创建列表(求1-10的平方)
nums1 = []
for i in range(1, 11):
nums1.append(i*i)
# 列表推导式创建(一行搞定)
nums2 = [i*i for i in range(1, 11)]
print(nums2) # 输出:[1,4,9,...,100]
# 带条件的列表推导式(只保留偶数的平方)
nums3 = [i*i for i in range(1, 11) if i % 2 == 0]
print(nums3) # 输出:[4, 16, 36, 64, 100]
1.5 类和对象
Python 是面向对象语言,类用于定义 "事物的模板",对象是模板的实例
python
# 定义类
class Student:
# 初始化方法(创建对象时自动执行)
def __init__(self, name, age):
self.name = name # 实例属性
self.age = age
# 实例方法
def introduce(self):
print(f"我叫{self.name},今年{self.age}岁")
# 创建对象(实例化)
stu1 = Student("小明", 18)
stu1.introduce() # 调用方法,输出:我叫小明,今年18岁
# 访问/修改属性
stu1.age = 19
print(stu1.age) # 输出:19
1.6 常用内置函数
1.6.1 部分常见函数
python
# 1. len():获取长度(列表、字典、字符串等)
print(len([1,2,3])) # 输出:3
print(len({"name":"小明", "age":18})) # 输出:2
# 2. range():生成整数序列(常用在循环)
for i in range(3): # 0,1,2
print(i)
# 3. sorted():排序(返回新列表)
nums = [3,1,2]
print(sorted(nums)) # 输出:[1,2,3]
# 4. enumerate():遍历同时获取索引和值
fruits = ["苹果", "香蕉"]
for idx, fruit in enumerate(fruits):
print(f"索引{idx}:{fruit}") # 输出:索引0:苹果;索引1:香蕉
1.6.2 zip打包
对应位置的元素配对 ,打包成一个个元组
python
# 5. zip():打包多个序列,打包成元组,
names = ["小明", "小红"]
ages = [18, 17]
for name, age in zip(names, ages):
print(f"{name}:{age}岁")
# 如果多个可迭代对象长度不一致,zip() 会以最短的那个为准,超出部分会被忽略
names = ["小明", "小红", "小刚"] # 长度3
ages = [18, 17] # 长度2
zipped = list(zip(names, ages))
print(zipped) # 输出:[('小明', 18), ('小红', 17)](小刚被忽略)
# zip 对象是一次性的:zip 对象只能遍历一次,遍历后就 "空了",如果需要多次使用,要先转成列表
zipped = zip(names, ages)
# 第一次遍历
for item in zipped:
print(item) # 输出('小明',18)、('小红',17)
# 第二次遍历(无输出,因为zip对象已耗尽)
for item in zipped:
print(item) # 无输出
# 解决方法:转成列表后再用
zipped_list = list(zip(names, ages))
for item in zipped_list:
print(item) # 正常输出
for item in zipped_list:
print(item) # 再次正常输出
1.6.3 类型转换
python
# 转成字符串
str(123) → "123"
# 转成整数(需可转换)
int("123") → 123
int(3.9) → 3
# 转成浮点数
float("3.14") → 3.14
# 转成布尔值(0 / 空对象为 False,其余为 True)
bool(0) → False
bool([1]) → True
# 转成列表
list((1,2)) → [1,2]
list({1,2}) → [1,2]
# 转成字典(需是键值对格式)
dict([("a",1), ("b",2)]) # 输出{"a":1,"b":2}
# 转成集合(去重)
set([1,1,2]) → {1,2}
二、文件操作相关
2.1 普通文件操作(.txt、.md、.csv)
方式一:处理文本文件、CSV 文件等是 Python 的常见场景,核心用open()函数。
python
# 1. 写入文件
with open("test.txt", "w", encoding="utf-8") as f: # "w"=写入模式,覆盖原有内容
f.write("Hello Python!\n")
f.write("这是第二行内容")
# 2. 读取文件
with open("test.txt", "r", encoding="utf-8") as f: # "r"=读取模式
content = f.read() # 读取全部内容
print(content)
# 3. 追加内容
with open("test.txt", "a", encoding="utf-8") as f: # "a"=追加模式
f.write("\n这是追加的内容")
核心参数:
mode:r(读)、w(写,覆盖)、a(追加)、r+(读写);
encoding="utf-8":避免中文乱码(必须指定)
方式二:用内置模块封装
比如处理 CSV 文件,用 csv 模块
python
import csv
# 读取CSV文件(不用手动写open(),但csv模块内部会调用)
with open("data.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
print(row)
# 更简化的第三方库(如pandas,完全不用写open())
import pandas as pd
df = pd.read_csv("data.csv") # 一行读取CSV,底层封装了open()
2.2 二进制文件(.jpg、.png、.zip、.exe 等)
方式一:使用open
要指定 mode="rb"(读二进制)/"wb"(写二进制)
python
# 复制一张图片(二进制读写)
with open("source.jpg", "rb") as f1:
img_data = f1.read() # 读取二进制数据
with open("copy.jpg", "wb") as f2:
f2.write(img_data) # 写入二进制数据
方式二:使用三方库
python
from PIL import Image
img = Image.open("test.jpg") # PIL封装了open(),不用自己写
img.save("new.jpg")
2.3 特殊格式(.json、.xlsx 等)
json:
python
import json
# 方式1:手动open() + json.load()
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f) # 读取JSON文件
# 方式2:读取字符串,用json.loads()(不用open())
json_str = '{"name":"小明","age":18}'
data = json.loads(json_str)
python
# 写入
import json
# 准备Python数据(字典)
data = {"name": "小明", "age": 18, "hobby": ["打球", "看书"]}
# 方式1:写入文件(用dump)
with open("data.json", "w", encoding="utf-8") as f:
# ensure_ascii=False:避免中文被转成\uXXXX编码(核心!)
# indent=4:格式化输出,缩进 4 个空格,可读性高
json.dump(data, f, ensure_ascii=False, indent=4)
# 方式2:转成JSON字符串(用dumps)
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str) # 输出带格式的JSON字符串,中文正常显示
excel:
python
import pandas as pd
# 读取Excel,一行搞定,底层封装了open()和二进制处理
df = pd.read_excel("data.xlsx")
df.to_excel("new_data.xlsx", index=False)
2.4 大文件
用open分块读取
python
# 读取大文件(每次读1024字节)
with open("big_file.log", "r", encoding="utf-8") as f:
while True:
chunk = f.read(1024) # 分块读取
if not chunk:
break
print(chunk) # 处理每一块内容
三、日期相关
| 格式符 | 含义 | 示例 |
|---|---|---|
%Y |
4 位年份 | 2026 |
%m |
2 位月份 | 03(3 月) |
%d |
2 位日期 | 12 |
%H |
24 小时制小时 | 14(下午 2 点) |
%M |
分钟 | 30 |
%S |
秒 | 00 |
%y |
2 位年份 | 26(2026) |
3.1 字符串转日期
python
from datetime import datetime
# 示例1:仅日期字符串转日期对象
date_str = "2026-03-12"
# 格式符要和字符串格式完全匹配(%Y-%m-%d 对应 2026-03-12)
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
print(date_obj) # 输出:2026-03-12 00:00:00(默认补0时0分0秒)
# 示例2:日期+时间字符串转日期对象
datetime_str = "2026/03/12 14:30:59"
datetime_obj = datetime.strptime(datetime_str, "%Y/%m/%d %H:%M:%S")
print(datetime_obj) # 输出:2026-03-12 14:30:59
# 示例3:处理中文格式(比如 2026年03月12日)
cn_date_str = "2026年03月12日"
cn_date_obj = datetime.strptime(cn_date_str, "%Y年%m月%d日")
print(cn_date_obj) # 输出:2026-03-12 00:00:00
3.2 日期对象转字符串
python
from datetime import datetime
# 先获取当前时间的日期对象(常用)
now = datetime.now() # 输出:2026-03-12 10:00:00(当前系统时间)
# 示例1:转成 年-月-日 格式
date_str = now.strftime("%Y-%m-%d")
print(date_str) # 输出:2026-03-12
# 示例2:转成 年/月/日 时:分:秒 格式
datetime_str = now.strftime("%Y/%m/%d %H:%M:%S")
print(datetime_str) # 输出:2026/03/12 10:00:00
# 示例3:转成中文格式(带星期)
cn_datetime_str = now.strftime("%Y年%m月%d日 %H时%M分%S秒 星期%w")
# %w:星期(0=周日,1=周一...6=周六)
print(cn_datetime_str) # 输出:2026年03月12日 10时00分00秒 星期3
只涉及日期
python
from datetime import date, timedelta
# 基础日期
today = date.today()
# 计算明天
tomorrow = today + timedelta(days=1)
print("明天:", tomorrow) # 输出:2026-03-13
# 转成 "年-月-日" 格式
str1 = today.strftime("%Y-%m-%d")
print(str1) # 输出:2026-03-12
# 转成中文格式 "xxxx年xx月xx日"
str2 = today.strftime("%Y年%m月%d日")
print(str2) # 输出:2026年03月12日
3.3 时间戳与日期的转换
3.3.1 日期对象转时间戳
python
from datetime import datetime
now = datetime.now()
timestamp = now.timestamp() # 转成时间戳(浮点数,带毫秒)
print(timestamp) # 输出:1770789600.123456
3.3.2 时间戳转日期对象
python
from datetime import datetime
timestamp = 1770789600.123456
# 方式1:转成本地时间
datetime_obj = datetime.fromtimestamp(timestamp)
print(datetime_obj) # 输出:2026-03-12 10:00:00.123456(本地时区)
3.4 日期加减
满足 "操作的是 datetime.datetime 或 datetime.date 对象",不管这个对象是怎么创建的,都能和 timedelta 做加减
python
from datetime import datetime, timedelta
now = datetime.now()
# 示例1:计算1天后的日期
next_day = now + timedelta(days=1)
print("1天后:", next_day.strftime("%Y-%m-%d")) # 输出:2026-03-13
# 示例2:计算3天前的日期
last_3_day = now - timedelta(days=3)
print("3天前:", last_3_day.strftime("%Y-%m-%d")) # 输出:2026-03-09
# 示例3:计算2小时30分钟后的时间
later = now + timedelta(hours=2, minutes=30)
print("2小时30分后:", later.strftime("%Y-%m-%d %H:%M:%S"))
# 示例4:计算两个日期的差值
date1 = datetime(2026, 3, 12)
date2 = datetime(2026, 3, 15)
delta = date2 - date1
print("日期差:", delta.days, "天") # 输出:3 天
print("总秒数:", delta.total_seconds()) # 输出:259200.0 秒
# 示例5:转换后在计算
date_str = "2026-03-12"
# 转成datetime对象
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
# 计算3天后
after_3d = date_obj + timedelta(days=3)
print("3天后:", after_3d.strftime("%Y-%m-%d")) # 输出:2026-03-15
3.5 日期比较
python
from datetime import date, datetime
# date对象比较(仅日期)
d1 = date(2026, 3, 12)
d2 = date(2026, 3, 15)
print(d1 < d2) # True(12日早于15日)
print(d1 == d2) # False
# datetime对象比较(日期+时间)
dt1 = datetime(2026, 3, 12, 10, 0)
dt2 = datetime(2026, 3, 12, 14, 0)
print(dt1 < dt2) # True(10点早于14点)