# 列表 list
nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.append(7) # 追加
nums.extend([8, 10]) # 拼接
nums.insert(0, 0) # 插入
nums.remove(1) # 删第一个匹配值
nums.pop() # 弹最后一个
nums.sort() # 原地排序
nums.sort(reverse=True) # 降序
sorted(nums) # 返回新列表
nums.reverse()
# 字典 dict
d = {"name": "tom", "age": 20}
d["email"] = "t@x.com"
d.get("phone", "N/A") # 安全取值
d.setdefault("city", "BJ")
d.update({"age": 21, "city": "SH"})
d.pop("email")
d.keys(); d.values(); d.items()
# 集合 set(去重 + 集合运算)
s = {1, 2, 3}
s.add(4); s.discard(2)
a & b # 交集
a | b # 并集
a - b # 差集
a ^ b # 对称差
4. Python 推导式与生成器:从列表到惰性求值进阶 · Python
一行的优雅,百倍内存的差距——什么时候用 []、什么时候用 ()。
# 列表推导式(立即生成完整列表)
squares = [x*x for x in range(10)]
evens = [x for x in range(20) if x % 2 == 0]
pairs = [(x, y) for x in range(3) for y in range(3)]
# 字典推导式
square_map = {x: x*x for x in range(5)}
# 集合推导式
unique = {x % 5 for x in range(20)}
# 生成器表达式(惰性,内存友好)
gen = (x*x for x in range(10**8)) # 不占内存
next(gen) # 0
sum(x*x for x in range(10**8)) # sum 直接吃生成器
# yield 函数(可复用的生成器)
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
list(fib(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
小贴士数据量大(>10万)优先用生成器;需要反复遍历或取 len()/索引 才用列表。
5. Python 文件与异常:从 with open 到 JSON入门 · Python
正确地打开文件、捕获异常、读写 JSON,Python IO 入门三件套。
# 文本读写(总用 with)
with open("data.txt", encoding="utf-8") as f:
content = f.read() # 一次性
f.seek(0)
for line in f: # 逐行
print(line.rstrip())
with open("out.txt", "w", encoding="utf-8") as f:
f.write("hello\n")
# 异常处理
try:
n = int(s)
except ValueError as e:
print("不是整数:", e)
except Exception as e:
print("其它异常:", e)
else:
print("成功,n =", n)
finally:
print("总会跑")
# JSON
import json
with open("data.json", encoding="utf-8") as f:
data = json.load(f)
with open("out.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
6. Python 实用脚本片段进阶 · Python
日常工作里反复会用到的小工具,每个都标了"用途 / 代码 / 说明"。
6.1 批量改后缀
import os
for name in os.listdir("."):
if name.endswith(".txt"):
os.rename(name, name[:-4] + ".md")
6.2 端口探活
import socket
s = socket.socket()
s.settimeout(2)
try:
s.connect(("127.0.0.1", 3306))
print("OK")
except Exception as e:
print("FAIL", e)
finally:
s.close()
6.3 日志抓错行
import re
pat = re.compile(r"\d{4}-\d{2}-\d{2}.*ERROR.*")
with open("app.log", encoding="utf-8") as f:
for line in f:
if pat.search(line):
print(line.rstrip())
6.4 命令行进度条
import sys, time
for i in range(1, 101):
sys.stdout.write(f"\r{i:3d}% |{'█'*i}{' '*(100-i)}|")
sys.stdout.flush()
time.sleep(0.05)
print()
# 类型
int(x) float(x) str(x) bool(x) list(x) tuple(x) set(x) dict(x)
# 序列操作
a[1:3] a[:5] a[::-1] a[::2]
len(a) min(a) max(a) sum(a) sorted(a) reversed(a)
a.append(x) a.extend(b) a.insert(i,x) a.remove(x) a.pop() a.clear()
# 字典
d.get(k, default) d.setdefault(k, v)
d.keys() d.values() d.items()
{k: v for k, v in iterable}
# 字符串
s.split(sep) sep.join(seq) s.strip() s.replace(a, b)
f"hello {name}" s.startswith(p) s.endswith(p) s.find(sub)
# 文件
with open("f.txt", encoding="utf-8") as f:
data = f.read()
for line in open("f.txt", encoding="utf-8"):
...
③ Linux 常用命令
ls -la # 详细列表
cd - # 回到上次的目录
pwd # 当前路径
mkdir -p a/b/c # 递归创建
rm -rf dir # 强制删除
cp -r src dst # 递归复制
mv a b # 改名/移动
chmod 755 file # rwxr-xr-x
chown user:group file # 改属主
find . -name "*.log" # 查找文件
grep -rn "kw" . # 递归搜索
ps aux | grep nginx # 查进程
kill -9 PID # 强杀
top / htop # 实时资源
df -h # 磁盘占用
du -sh dir # 目录大小
free -h # 内存
uname -a # 内核信息
uptime # 运行时长
date # 当前时间
④ Docker 速查
docker pull nginx:latest
docker images
docker run -d -p 80:80 --name web nginx
docker ps / docker ps -a
docker logs -f web
docker exec -it web sh
docker stop web && docker start web
docker rm web && docker rmi nginx
# Compose
docker compose up -d
docker compose down
docker compose logs -f
# 清理
docker system prune -a
docker volume ls
docker network ls
SELECT id, name FROM users WHERE age > 18 ORDER BY id DESC LIMIT 10;
INSERT INTO users(name, age) VALUES ('tom', 20);
UPDATE users SET age = age + 1 WHERE id = 1;
DELETE FROM logs WHERE created_at < '2025-01-01';
-- 聚合
SELECT status, COUNT(*) FROM orders GROUP BY status HAVING COUNT(*) > 5;
-- 连接
SELECT u.name, o.total
FROM users u JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= '2025-06-01';
-- 索引
CREATE INDEX idx_users_email ON users(email);
import os
for name in os.listdir("."):
if name.endswith(".txt"):
os.rename(name, name[:-4] + ".md")
说明:os.listdir 列出当前目录,endswith 过滤后改后缀。
片段 2:检测端口是否通
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
try:
s.connect(("127.0.0.1", 3306))
print("OK")
except Exception as e:
print("FAIL", e)
finally:
s.close()
说明:用 socket TCP 连接测试端口,比 telnet 干净。
片段 3:从日志中抓错误行
import re
pat = re.compile(r"\d{4}-\d{2}-\d{2}.*ERROR.*")
with open("app.log", encoding="utf-8") as f:
for line in f:
if pat.search(line):
print(line.rstrip())
说明:正则匹配"日期+ERROR"行,逐行处理避免一次性读入大文件。
片段 4:JSON 文件读写
import json
# 读
with open("data.json", encoding="utf-8") as f:
data = json.load(f)
# 写
with open("out.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
说明:ensure_ascii=False 让中文不被转义,indent=2 让输出可读。
片段 5:命令行进度条
import sys, time
for i in range(1, 101):
sys.stdout.write(f"\r{i:3d}% |{'█'*i}{' '*(100-i)}|")
sys.stdout.flush()
time.sleep(0.05)
print()
说明:\r 让光标回到行首,flush 立刻输出,适合小工具。
片段 6:一键健康检查
#!/bin/bash
echo "--- 磁盘 ---"; df -h | head -3
echo "--- 内存 ---"; free -h | head -2
echo "--- 负载 ---"; uptime
echo "--- 服务 ---"; ss -tlnp | head -10