You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成WiFi扫描CSV文件字段错乱问题求助

WiFi扫描CSV字段错乱问题解决

问题背景

公司原有季度WiFi扫描程序迁移至Windows 11后功能失效,使用Python结合pywifi、comtypes库重写后,程序可正常获取WiFi数据并写入CSV文件,但出现字段内容错乱、无法与表头对齐的问题。

错误输出示例:

| BSSID             | SSID              | Signal          | Location        | 
| Home              | b0:95:75:46:45:d1 | -36             | Northern Atrium |
| Home              | b0:95:75:46:45:d2 | Northern Atrium | -62             |
| 78:76:89:97:04:e2 |                   | Western Atrium  | -83             |
|                   | -62               | Kimsuezun       | Western Atrium  |

问题原因

核心错误是写入CSV时使用了无序的集合类型传递数据:
代码中writer.writerow({bssid, ssid, signal, location})一行,集合({})的元素顺序随机且不固定,每次写入时字段顺序会随机变化,无法与表头的固定顺序(BSSID/SSID/Signal/Location)对应,最终导致内容错乱。

解决方案

方法一:改用有序列表传递数据(简单直接)

将集合改为列表([]),列表元素顺序固定,与表头字段严格对应即可:

修改代码中写入行的部分:

# 原错误代码
# writer.writerow({bssid, ssid, signal, location})

# 修改后代码
writer.writerow([bssid, ssid, signal, location])

方法二:使用csv.DictWriter(更规范,适合字段扩展)

如果后续需要调整字段或更清晰地绑定字段与内容,推荐使用csv.DictWriter,通过字典键值对明确对应表头:

修改CSV写入的相关代码:

with io.open('Wifi-Scan.csv', 'w', encoding='utf-8', newline='') as file:
    fieldnames = ['BSSID', 'SSID', 'Signal', 'Location']
    # 初始化DictWriter并指定字段名
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    # 写入表头
    writer.writeheader()

    for network in results:
        # ...(其他逻辑保持不变)

        # 用字典绑定字段与数据
        writer.writerow({
            'BSSID': bssid,
            'SSID': ssid,
            'Signal': signal,
            'Location': location
        })

额外优化建议

原代码中match choice的分支逻辑可以用字典映射简化,减少冗余同时处理无效输入:

location_map = {
    'N': "Northern Atrium",
    'NE': "Northeastern Atrium",
    'E': "Eastern Atrium",
    'SE': "Southeastern Atrium",
    'S': "Southern Atrium",
    'SW': "Southwestern Atrium",
    'W': "Western Atrium",
    'NW': "Northwestern Atrium",
    'K': "Kitchen",
    'I': "IT Area",
    'V': "Vacations",
    'T': "Travelstore Area",
    'D': "Denise's Office",
    'M': "Meetings Area",
    'R': "Reception"
}
# 获取对应位置,输入无效时默认显示"Unknown Location"
location = location_map.get(choice.strip().upper(), "Unknown Location")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:13:08