




本文教你如何在 python 脚本中精准识别低于 0.8 pu 的有效低电压值,同时安全跳过无意义的 0.0 空值,避免误判“电压恢复失败”。核心是修改判断逻辑,增加 != 0.0 条件,并优化代码可读性与性能。
在电力系统暂态分析中,.txt 日志文件常包含大量电压采样数据(单位:标幺值 PU),其中 0.0 往往代表未采集、屏蔽或初始化占位值,而非真实欠压事件。你当前的逻辑——仅用 if voltage 解决方法不是粗暴提高下限(如设为 0.01),而是显式排除特定无效值,保留对真实亚稳态电压(如 0.23、0.57)的敏感检测。
将原循环中的判断语句:
if float(channel[volts[voltsKeys[k]]]) < acceptableVoltagePU:
isVoltageGood = False替换为(推荐写法,兼顾清晰与效率):
current_voltage = float(channel[volts[voltsKeys[k]]])
if current_voltage < acceptable_voltage_PU and current_voltage != 0.0:
is_volta
ge_good = False? 为什么更优? 避免重复调用 float() 和多层字典索引(channel[volts[...]]),提升性能; and current_voltage != 0.0 精准过滤掉干扰项,不影响其他合法低电压(如 0.05, 0.79)的识别。
你的变量名(如 timeForVoltageRecovery)采用驼峰式,但 Python 社区通用下划线分隔(snake_case)。统一命名可提升协作性与可维护性:
| 原变量名 | 推荐写法 |
|---|---|
| timeForVoltageRecovery | time_for_voltage_recovery |
| acceptableVoltagePU | acceptable_voltage_PU |
| isVoltageGood | is_voltage_good |
? 提示:PU 作为单位缩写,大写更符合工程惯例,故保留 voltage_PU 而非全小写。
val_str = channel[volts[voltsKeys[k]]]
if not val_str or val_str.strip().lower() in ('', 'n/a', 'none'):
continue # 跳过无效条目
try:
current_voltage = float(val_str)
except ValueError:
continue # 跳过无法解析的字符串for k in range(min(10, len(voltsKeys))):
排除 0.0 干扰值的关键不是调整阈值范围,而是在原有逻辑上叠加精确的排除条件:voltage 真实低于 0.8 PU 的有效电压值时标记为 BAD,彻底解决“0.0 误触发”问题。