39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
# 选品用的文本和数字清洗。空值和认不出的数字收成空或 None,不抛。
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
|
||
# 收成去掉两端空白的字符串。None 当空。
|
||
def normalize_text(value: Any) -> str:
|
||
if value is None:
|
||
return ""
|
||
return str(value).strip()
|
||
|
||
|
||
# 把文本收成整数。空或认不出返回 None。先按浮点再取整,兼容 "10.0"。
|
||
def parse_int_or_none(value: Any) -> int | None:
|
||
text = normalize_text(value)
|
||
if text == "":
|
||
return None
|
||
try:
|
||
return int(float(text))
|
||
except ValueError:
|
||
return None
|
||
|
||
|
||
# 把文本收成浮点。空或认不出返回 None。逗号当千分位去掉后再试一次。
|
||
def parse_float_or_none(value: Any) -> float | None:
|
||
text = normalize_text(value)
|
||
if text == "":
|
||
return None
|
||
try:
|
||
return float(text)
|
||
except ValueError:
|
||
cleaned = text.replace(",", "").replace(",", "")
|
||
try:
|
||
return float(cleaned)
|
||
except ValueError:
|
||
return None
|