You need to enable JavaScript to run this app. Windows下使用Python获取WiFi信息写入文件如何避免重复追加?
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用Python获取WiFi信息写入文件如何避免重复追加?

WiFi扫描去重存储实现方案

原有代码问题梳理

  • 逻辑顺序错误:先将扫描结果追加写入文件,再做重复判断,完全颠倒了校验逻辑
  • strip()方法使用错误:str.strip()返回处理后的新字符串,不会修改原变量,原有判断逻辑完全无效
  • 去重颗粒度过大:直接对比整段扫描输出,没有拆分单个WiFi条目,无法实现单条WiFi去重
  • 缺少循环执行逻辑,无法持续扫描

修复后可运行代码

import subprocess
import time
import re

# 存储已记录的WiFi BSSID,BSSID为每个WiFi热点的唯一物理标识
exist_bssids = set()
output_path = "output.txt"

# 首次启动读取已存储的BSSID
try:
    with open(output_path, "r", encoding="utf-8") as f:
        content = f.read()
        # 正则匹配所有已存的BSSID
        exist_bssids = set(re.findall(r"BSSID\s+\d+\s*:\s*([0-9a-fA-F:]+)", content))
except FileNotFoundError:
    # 文件不存在就创建空文件
    open(output_path, "w", encoding="utf-8").close()

identify = "Windows" # 保留原有系统判断逻辑即可
scan_interval = 10 # 扫描间隔,单位可自行调整

while True:
    if identify == "Windows":
        cmd = ["netsh", "wlan", "show", "networks", "mode=BSSID"]
        networks = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, errors = networks.communicate()
        # 如果utf-8解码乱码可替换为gbk
        scan_data = output.decode("utf-8")
        
        # 拆分单条WiFi条目
        ssid_blocks = re.split(r"(SSID\s+\d+\s*:)", scan_data)
        # 跳过开头的接口汇总信息
        for i in range(1, len(ssid_blocks), 2):
            full_block = ssid_blocks[i] + ssid_blocks[i+1]
            # 提取当前条目的BSSID
            bssid_match = re.search(r"BSSID\s+\d+\s*:\s*([0-9a-fA-F:]+)", full_block)
            if not bssid_match:
                continue
            current_bssid = bssid_match.group(1).strip()
            # 未记录过的热点才写入文件
            if current_bssid not in exist_bssids:
                with open(output_path, "a", encoding="utf-8") as f:
                    f.write(full_block + "\n" + "-"*50 + "\n")
                exist_bssids.add(current_bssid)
                print(f"新热点已记录:{current_bssid}")
    # 等待下一次扫描
    time.sleep(scan_interval)

关键实现说明

  • 用BSSID作为去重依据:每个WiFi热点的BSSID是唯一的物理地址,不会出现重复误判
  • 集合存储已存BSSID:查询速度快,适合高频扫描的去重场景
  • 拆分单条WiFi条目存储:每个热点单独拆分后写入,避免整段重复存储
  • 自动兼容首次运行:没有output.txt文件时会自动创建

内容的提问来源于stack exchange,提问作者SwitchBlade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 07:06:01