Python个人记录
关于逻辑值的处理:
if判断取反不能用!, 运算时是短路的
并(and / &)
或(or / |)
否(not)
将excel文件内数据处理成批量插入SQL语句
import pandas as pd
def splicing2batch_insert_sql(file_path: str,sheet_name: str|int,table_name: str):
df = pd.read_excel(file_path,sheet_name=sheet_name,skiprows=0, index_col=False,keep_default_na=True)
cn = df.columns
res = "INSERT INTO `{0}`(".format(table_name)
for e in cn:
res += ("`{0}`,").format(e)
res = res[:-1]
res+=") VALUES"
for index, row in df.iterrows():
ts = "("
for e in cn:
if pd.isna(row[e]):
ts += "NULL,"
elif not isinstance(row[e],(int,float)):
ts += "'{0}',".format(str(row[e]))
else:
ts += str(row[e]) + ","
res += ts[:-1]+"),"
return res[:-1]+";"
ip是否存在
import ipaddress
def ip_in_range(target_ip, rule):
rule = rule.strip()
target_ip = target_ip.strip()
target = ipaddress.ip_address(target_ip)
# 1. 单个 IP 情况
if "-" not in rule and "/" not in rule:
return target == ipaddress.ip_address(rule)
# 2. CIDR 网段
if "/" in rule:
net = ipaddress.ip_network(rule, strict=False)
return target in net
# 3. IP 段 (1.1.1.1-20)
if "-" in rule:
base, end = rule.split("-")
base_ip = ipaddress.ip_address(base)
# 只变化最后一段的简写:基于 base 生成 end IP
end_ip = ipaddress.ip_address(".".join(base.split(".")[:-1] + [end]))
return base_ip <= target <= end_ip
return False
def ip_match_rules(ip,rules):
return any(ip_in_range(ip,r) for r in rules)
3327

被折叠的 条评论
为什么被折叠?



