Python新手求助:如何获取完整ID并正确统计符合条件的行
问题分析与解决
核心问题1:ID提取错误
你用line[0]只能取到行首第一个字符,但ID是1-1000的连续数字(可能是1位、2位或3位),必须提取行首所有连续的数字字符再转成整数才行。
核心问题2:代码笔误
keywords定义里有个低级错误:"247.224.231.109"x多了个x,直接删掉就能解决语法报错。
关于重复统计的疑问
原代码里any(kw in line for kw in keywords)只要行内存在任意一个关键词就会执行一次累加,同一行只会触发一次,不会重复统计,这点不用纠结。
解决方案1:用正则表达式提取ID(推荐)
正则能快速精准匹配行首的连续数字,适合处理这种固定格式的ID:
import re # 修正笔误,去掉多余的x keywords = ("ckneale8@weibo.com", "247.224.231.109", "Newborn", "205.36.91.89", "Madelin", "askeelqc@clickbank.net") varTotal = 0 with open("if-file.txt", "r") as file: for line in file: # 匹配行首的连续数字,返回匹配到的字符串,没匹配到返回None id_match = re.match(r'^\d+', line.strip()) if id_match: line_id = int(id_match.group()) # 检查行内是否包含任意关键词 if any(kw in line for kw in keywords): varTotal += line_id print(varTotal)
解决方案2:手动遍历字符提取ID(适合新手理解)
如果不想用正则,可以手动遍历行的每个字符,收集数字直到遇到非数字:
keywords = ("ckneale8@weibo.com", "247.224.231.109", "Newborn", "205.36.91.89", "Madelin", "askeelqc@clickbank.net") varTotal = 0 with open("if-file.txt", "r") as file: for line in file: id_str = "" # 遍历行的每个字符,收集开头的数字 for char in line: if char.isdigit(): id_str += char else: break # 遇到非数字就停止,因为ID在最开头 # 确保id_str不为空再转整数 if id_str: line_id = int(id_str) if any(kw in line for kw in keywords): varTotal += line_id print(varTotal)
内容的提问来源于stack exchange,提问作者Billie_Jean
相关产品推荐
相关产品推荐

