Python提取HTML数据写CSV时如何按邮箱去重列表内重复人员条目
实现方案
原有代码问题
- 正则表达式语法错误:
re.compile(r'+.')属于非法写法,+作为量词必须跟在匹配规则后,不能放在开头,且本场景无需使用正则,直接取订单的邮箱字段对比即可 - 判断逻辑完全错误:你构造的包含正则对象的列表不可能匹配到
rows中存储的订单数据,无法触发去重逻辑 - 语法错误:
list.append()仅接收1个参数,直接传入number, name, email三个参数会抛出类型错误,需要先封装为列表再传入
推荐实现(适配超大数据量场景)
你需要处理超大型HTML文件,数据量较大,使用set存储已存在的邮箱,查询效率为O(1),远高于每次遍历列表的O(n)效率,实现代码如下:
# 初始化已有邮箱集合,从现有orders提取,如果你的rows初始数据源和orders不一致,换成rows即可 existing_emails = set(order[2] for order in orders) # 初始化结果列表为现有订单 rows = orders.copy() # 处理新订单 number = '10004' name = 'Jane' email = 'jane@example.com' # 邮箱不存在才添加 if email not in existing_emails: rows.append([number, name, email]) existing_emails.add(email)
小数据量简化实现
如果数据量较小,不需要考虑性能,也可以直接遍历现有列表判断:
rows = orders.copy() number = '10004' name = 'Jane' email = 'jane@example.com' email_exist = False for order in rows: if order[2] == email: email_exist = True break if not email_exist: rows.append([number, name, email])
内容的提问来源于stack exchange,提问作者sirEgghead
相关产品推荐
相关产品推荐

