Python分割字符串提取冒号后内容 解决netsh命令输出处理报错问题
问题解决方法
错误原因
- 之前输出
All User Profile是因为你调用split(":",1)[0]取了冒号前的内容,要拿WiFi名本就应该取冒号后的[1]元素 - 索引越界报错的原因是
netsh wlan show profiles的输出里包含大量没有冒号的行(比如开头的命令说明行、空行、分隔标题行),这类行调用split(":")后返回的列表长度只有1,直接取索引1就会触发越界错误
修复后的可运行代码
import subprocess # 执行netsh命令获取WiFi配置列表,指定GBK解码适配Windows中文环境 root = subprocess.check_output( "netsh wlan show profiles", shell=True, stderr=subprocess.STDOUT ).decode('gbk', errors='ignore') wifi_list = [] for line in root.splitlines(): # 双重判断过滤有效行:既包含目标标记,也包含冒号 if "All User Profile" in line and ":" in line: # 拆分后取后半段,去除首尾空白得到纯净WiFi名 wifi_name = line.split(":", 1)[1].strip() wifi_list.append(wifi_name) print(wifi_name)
补充说明
- 代码中增加了双重校验逻辑,只有同时包含
All User Profile标记和冒号的行才会被处理,从根源避免索引越界问题 - 针对Windows中文环境默认的GBK编码做了解码适配,加
errors='ignore'避免特殊字符导致的解码崩溃 - 调用
strip()方法自动移除了WiFi名前后的多余空格,输出结果更干净
内容的提问来源于stack exchange,提问作者user17219216
相关产品推荐
相关产品推荐

