Python进阶

一、进阶语法

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点)
相关推荐
2401_891482172 小时前
C++代码复杂性分析
开发语言·c++·算法
C羊驼2 小时前
C语言学习笔记(十):操作符
c语言·开发语言·经验分享·笔记·学习
myloveasuka2 小时前
[Java]单列集合
android·java·开发语言
南梦浅2 小时前
全过程步骤(从零到高可用企业网络)
开发语言·网络·php
mjhcsp2 小时前
C++ 梯度下降法(Gradient Descent):数值优化的核心迭代算法
开发语言·c++·算法
Mr数据杨2 小时前
【Dv3Admin】Django一键配置权限规则
python·django·sqlite
-杨豫2 小时前
ZLibrary反爬破解实战:从验证码到加密全突破
python
ok_hahaha2 小时前
java从头开始-黑马点评-基础篇
java·开发语言