3、Python基础速通(一):变量、数据类型、字符串操作、列表与字典

各位同学,咱们直接进入正题。

做网络运维,脚本是吃饭的家伙。而Python,就是那把最顺手的刀。今天这一讲,咱们把Python最基础、最核心的几个概念捋一遍。别嫌基础,我见过太多人在这上面栽跟头。

核心观点:Python的变量、数据类型、字符串、列表和字典,是构建一切自动化脚本的砖瓦。你写100行代码,至少有80行在跟它们打交道。

3.1 变量:给数据贴个标签

变量是什么?说白了,就是给数据起个名字。你想想看,你操作一台交换机,总得知道它的IP地址吧?你不可能每次都把IP地址写死,对吧?

# 这就是变量
switch_ip = "192.168.1.1"
username = "admin"
password = "cisco123"

我个人习惯,变量名一定要见名知意。别用a、b、c这种,三个月后你自己都看不懂。我在项目中遇到过,有人用a = "192.168.1.1",结果后面代码里全是a、b、c,排查问题的时候差点把键盘砸了。

小技巧:Python变量名区分大小写。SwitchIPswitch_ip是两个不同的变量。我建议统一用小写加下划线,这是Python社区的约定俗成。

3.2 数据类型:Python帮你分好了类

Python是动态类型语言,你不需要声明变量类型。但你要知道,每个数据背后都有类型。

类型 例子 说明
int 10, 255, 1000 整数,比如端口号、VLAN ID
float 3.14, 1.5 浮点数,比如带宽利用率
str "Hello", '192.168.1.1' 字符串,IP地址、设备名都用它
bool True, False 布尔值,判断条件时用

为什么会这样?因为Python在背后帮你做了类型推断。你写port = 22,Python就知道port是整数。你写ip = "10.0.0.1",Python就知道ip是字符串。

注意:我曾经在脚本里把端口号写成了字符串"22",结果跟整数22做比较时死活不相等。排查了半天,才发现是类型问题。嗯,这里要注意,type()函数是你的好帮手。

# 用type()查看类型
port = 22
print(type(port))  # 输出:<class 'int'>

port_str = "22"
print(type(port_str))  # 输出:<class 'str'>

3.3 字符串操作:处理设备配置的利器

网络运维里,字符串操作太频繁了。解析设备输出、拼接命令、提取关键信息,全是字符串的活儿。

3.3.1 字符串拼接

# 拼接命令
hostname = "R1"
interface = "GigabitEthernet0/1"
command = "show interface " + interface
print(command)  # 输出:show interface GigabitEthernet0/1

# 用f-string更优雅(Python 3.6+)
command = f"show interface {interface} on {hostname}"
print(command)  # 输出:show interface GigabitEthernet0/1 on R1

我个人强烈推荐f-string。它比用+拼接更清晰,也不容易出错。我在写批量备份脚本时,所有命令都是用f-string动态生成的。

3.3.2 字符串分割与提取

# 解析设备输出
output = "Interface: GigabitEthernet0/1, IP: 192.168.1.1/24, Status: up"
parts = output.split(",")
for part in parts:
    print(part.strip())

你想想看,从设备上抓回来的配置,往往是一大段文本。用split()分割,用strip()去掉多余空格,再用find()in判断关键字,基本就能搞定大部分解析工作。

避坑指南:我曾经用split(" ")去分割配置行,结果遇到多个空格时,列表里全是空字符串。后来改用split()(不带参数),它会自动处理连续空白字符。记住了,split()默认按任意空白字符分割。

3.4 列表:有序的容器

列表,说白了就是一个可以装很多东西的盒子,而且顺序固定。在运维脚本里,列表用来存设备列表、IP地址池、端口号集合,再合适不过。

# 设备列表
devices = ["R1", "R2", "R3", "SW1", "SW2"]

# 添加设备
devices.append("FW1")
print(devices)  # 输出:['R1', 'R2', 'R3', 'SW1', 'SW2', 'FW1']

# 按索引访问
print(devices[0])  # 输出:R1
print(devices[-1])  # 输出:FW1(负索引从末尾开始)

# 切片
print(devices[1:3])  # 输出:['R2', 'R3']

我在项目中遇到过,需要批量ping一堆设备。把设备IP存在列表里,用for循环遍历,逐个ping。代码简洁,逻辑清晰。

# 批量ping示例
ip_list = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
for ip in ip_list:
    result = os.system(f"ping -c 1 {ip}")
    if result == 0:
        print(f"{ip} is reachable")
    else:
        print(f"{ip} is unreachable")

核心操作:列表的增删改查——append()remove()pop()index()sort()。这些方法,你写脚本时几乎天天用。

3.5 字典:键值对的威力

字典,是Python里最强大的数据结构之一。它用键(key)来映射值(value),查找速度极快。在运维场景里,字典用来存设备配置、接口状态、路由表,简直完美。

# 设备信息字典
device = {
    "hostname": "R1",
    "ip": "192.168.1.1",
    "vendor": "Cisco",
    "model": "ISR4331",
    "interfaces": ["G0/1", "G0/2", "G0/3"]
}

# 访问字典
print(device["hostname"])  # 输出:R1
print(device.get("vendor"))  # 输出:Cisco(推荐用get,不会报错)

# 修改值
device["ip"] = "10.0.0.1"

# 添加新键
device["os_version"] = "16.9.5"

你想想看,如果你要管理100台设备,每台设备有10个属性。用列表存?你得记住每个索引对应什么。用字典?直接通过设备名或IP就能查到所有信息。这就是字典的魅力。

注意:字典的键必须是不可变类型(字符串、数字、元组)。列表不能当键。我曾经试图用列表当键,结果Python直接报错。嗯,这个坑我替你们踩过了。

3.6 列表与字典的嵌套

实际项目中,很少只用单一的数据结构。往往是列表里套字典,字典里套列表。比如,管理一个网络的所有设备:

# 设备列表,每个设备是一个字典
network_devices = [
    {
        "hostname": "R1",
        "ip": "192.168.1.1",
        "role": "core"
    },
    {
        "hostname": "SW1",
        "ip": "192.168.1.2",
        "role": "access"
    },
    {
        "hostname": "FW1",
        "ip": "192.168.1.3",
        "role": "firewall"
    }
]

# 遍历所有设备
for device in network_devices:
    print(f"Connecting to {device['hostname']} at {device['ip']}...")
    # 这里可以写SSH连接代码

这种结构,在批量操作脚本里太常见了。从Excel或CSV里读设备信息,存成列表字典,然后逐个操作。我写的自动化备份脚本,核心数据结构就是这个样子。

3.7 本章知识体系

下面这张图,帮你理清今天讲的内容。变量是基础,数据类型是分类,字符串、列表、字典是三大核心工具。它们之间可以互相组合,形成更复杂的数据结构。

Python基础核心 变量 数据类型 字符串操作 int float str bool 拼接 分割 格式化 查找 列表 字典 有序 可修改 键值对 快速查找 嵌套组合

好了,今天的内容就到这里。变量、数据类型、字符串、列表、字典,这五个概念你吃透了,后面写脚本就会顺手很多。记住,多动手敲代码,光看是学不会的。


专注资料整理