3、Python基础速通(上):变量与数据类型、字符串处理、列表与字典、条件判断与循环

说实话,很多运维老手一听到「学Python」就头大。觉得又要背语法,又要记概念,太麻烦。

但我跟你说,Python这玩意儿,你只要把今天这几个核心啃下来,写脚本就已经够用了。剩下的都是查文档的事。

我当年带团队的时候,有个兄弟死活记不住列表和字典的区别。后来我让他把列表想象成「排队打饭」,字典想象成「储物柜编号」。他一下就通了。

好,咱们开始。

3.1 变量与数据类型

Python的变量,说白了就是个「标签」。你把数据贴个名字,方便以后找它。

和其他语言不一样,Python不用提前声明类型。你直接写 name = "nginx",它就自动知道这是个字符串。

核心要点:

  • 变量名只能包含字母、数字、下划线
  • 不能以数字开头
  • 大小写敏感(Namename 是两个东西)

常见的几种数据类型,我列个表给你看:

类型 例子 说明
int port = 8080 整数,比如端口号、进程数
float cpu_load = 0.85 浮点数,比如CPU负载、内存使用率
str host = "192.168.1.1" 字符串,用引号包起来
bool is_alive = True 布尔值,只有 True 和 False
None result = None 空值,表示「还没有数据」

我的小习惯:

写脚本时,我习惯用 type() 函数先看一眼变量类型。尤其是从配置文件读进来的数据,经常是字符串,直接做数学运算会报错。先确认类型,再动手,能省很多调试时间。

# 快速查看变量类型
port = "8080"
print(type(port))  # 输出:<class 'str'>

# 转换成整数才能做运算
port = int(port)
print(port + 1)    # 输出:8081

3.2 字符串处理

运维脚本里,字符串处理占了半壁江山。日志分析、配置解析、命令拼接,全是字符串的活。

我个人觉得,Python的字符串操作是它最友好的地方之一。你想想看,不用写一堆正则,几个方法就搞定了。

3.2.1 常用方法

log_line = "  ERROR: disk full on /dev/sda1  "

# 去掉首尾空格
clean = log_line.strip()
print(clean)  # "ERROR: disk full on /dev/sda1"

# 分割成列表
parts = clean.split(" ")
print(parts)  # ['ERROR:', 'disk', 'full', 'on', '/dev/sda1']

# 判断是否包含某个关键词
if "ERROR" in clean:
    print("发现错误!")

# 替换内容
new_line = clean.replace("disk full", "磁盘已满")
print(new_line)

我曾经踩过的坑:

有一次写日志监控脚本,用 split() 分割一行日志,结果发现有的行中间有多个空格,分割出来的列表长度不对。后来改成 split()(不加参数),它会自动处理连续空格。嗯,这里要注意。

3.2.2 字符串格式化

写脚本时经常要拼接命令或生成报告。我推荐用 f-string,Python 3.6 以后引入的,简洁又直观。

host = "192.168.1.100"
port = 22
user = "root"

# f-string 写法
cmd = f"ssh {user}@{host} -p {port}"
print(cmd)  # ssh root@192.168.1.100 -p 22

# 还可以做简单运算
cpu = 75.3
msg = f"当前CPU使用率:{cpu}%,已超过阈值70%"
print(msg)

3.3 列表与字典

这两个是运维脚本里最常用的数据结构。说白了,列表管「顺序」,字典管「映射」。

3.3.1 列表(List)

列表就像一串珠子,每个珠子都有位置(索引)。索引从0开始,这个别记错了。

# 定义一个服务器列表
servers = ["web01", "web02", "db01", "cache01"]

# 访问元素
print(servers[0])   # web01
print(servers[-1])  # cache01(负索引从末尾开始)

# 添加元素
servers.append("web03")

# 删除元素
servers.remove("db01")

# 遍历列表
for s in servers:
    print(f"正在检查服务器:{s}")

我常用的技巧:

批量操作服务器时,我会把IP列表放在一个文件里,用 readlines() 读进来,再用列表推导式去掉换行符:ips = [ip.strip() for ip in file]。一行代码搞定。

3.3.2 字典(Dict)

字典是键值对,就像查字典一样,通过「键」找到「值」。在运维场景里,字典常用来描述一个服务器的各种属性。

# 定义一个服务器的信息
server_info = {
    "hostname": "web01",
    "ip": "192.168.1.10",
    "role": "nginx",
    "cpu_cores": 4,
    "memory_gb": 8
}

# 访问值
print(server_info["ip"])        # 192.168.1.10
print(server_info.get("status", "unknown"))  # 安全取值,不存在返回默认值

# 修改值
server_info["memory_gb"] = 16

# 遍历字典
for key, value in server_info.items():
    print(f"{key}: {value}")

列表 vs 字典,怎么选?

  • 如果你关心顺序,或者只需要存一堆东西 → 用列表
  • 如果你需要通过名字/ID快速找到对应的值 → 用字典
  • 实际项目中,经常是列表里套字典,比如服务器列表,每个元素是一个字典

3.4 条件判断与循环

没有流程控制,脚本就是一潭死水。条件判断让脚本会「思考」,循环让脚本会「重复干活」。

3.4.1 if/elif/else

写条件判断时,我有个原则:先处理异常情况,再处理正常逻辑。这样代码更健壮。

cpu_usage = 92

if cpu_usage > 90:
    print("⚠️ CPU告警!需要立即处理")
elif cpu_usage > 70:
    print("⚠️ CPU偏高,建议关注")
else:
    print("✅ CPU正常")

我曾经犯过的错:

写了一个检查磁盘的脚本,条件判断写成了 if usage > 80,结果忘了考虑 usage 可能是字符串(从命令输出解析来的)。脚本跑了一周都没告警,后来发现是类型没转换。从那以后,我养成了在判断前先 print(type(变量)) 的习惯。

3.4.2 for 循环

for循环在运维里太常用了。遍历服务器列表、读取日志文件、批量执行命令,都靠它。

# 批量ping服务器
servers = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]

for ip in servers:
    result = os.system(f"ping -c 1 {ip}")
    if result == 0:
        print(f"{ip} 在线")
    else:
        print(f"{ip} 离线")

3.4.3 while 循环

while循环适合「不知道要循环多少次」的场景。比如等待某个进程启动,或者不断重试直到成功。

# 等待服务启动,最多等30秒
import time

max_retry = 30
count = 0

while count < max_retry:
    if check_service("nginx"):
        print("Nginx 已启动")
        break
    count += 1
    time.sleep(1)
else:
    print("Nginx 启动超时")

我的经验:

while循环一定要有退出条件,不然就是死循环。我习惯在循环里加一个计数器,超过最大次数就强制退出。这叫「熔断机制」,防止脚本卡死。

知识体系总览

下面这张图,是我梳理的本章知识结构。你可以把它当成一张「地图」,学完后再回来看,会更有感觉。

Python基础速通(上) 变量与数据类型 int / float / str bool / None 类型转换 字符串处理 strip / split replace / in f-string格式化 列表与字典 列表:顺序存储 字典:键值映射 增删改查 条件判断与循环 if / elif / else for 循环 while 循环 核心思想 先确认类型 → 再处理数据 → 最后控制流程 运维脚本典型应用 📋 日志分析 → 字符串处理 + 条件判断 🖥️ 批量服务器管理 → 列表 + for循环 📊 配置解析 → 字典 + 字符串处理 🔔 监控告警 → 条件判断 + while循环 📝 报告生成 → f-string + 列表 🔄 数据转换 → 类型转换 + 字典

好了,这一章的内容就这些。别贪多,先把变量、字符串、列表字典、条件循环这四样练熟。下一章咱们继续往下走,把函数、文件操作和异常处理搞定。

记住一句话:写脚本不是为了炫技,是为了解决问题。能用简单的代码搞定,就别整花里胡哨的。


公众号:蓝海资料掘金营,微信deep3321