CSV数据中图片请求占比统计异常:结果始终显示0.0%
问题分析与修复方案
核心问题
- 变量初始化位置错误:
hits和image_hits在for循环内部初始化,每次循环都会重置为0,最终仅统计最后一行数据,而非所有请求。 - 正则匹配逻辑偏差:
- 将整个CSV行转为字符串匹配后缀,但CSV每行包含多个字段,应该定位到存储请求文件名的特定列,而非整行。
- 正则仅匹配大写
PNG,忽略了小写png的情况,且未做大小写不敏感处理。
- 未处理空数据场景:如果没有任何请求数据,会触发除以0的错误。
修复后的代码
import re import csv file = downloadData(url) reader = csv.reader(file.splitlines(), delimiter=',') heading = next(reader, None) # 统计变量移至循环外初始化,确保累计所有数据 hits = 0 image_hits = 0 for line in reader: hits += 1 # 替换为你CSV中存储请求路径/文件名的列索引(示例为第2列,索引1) request_path = line[1] # 大小写不敏感匹配常见图片后缀 if re.search(r"\.(jpeg|gif|png)$", request_path, re.IGNORECASE): image_hits += 1 # 避免除以0错误 percentage = (image_hits / hits) * 100 if hits > 0 else 0.0 print("Image requests account for {:.1f}% of all requests".format(percentage))
关键修复说明
- 把统计变量移到循环外,保证每次循环都能累计计数,而非每次重置。
- 针对CSV的特定字段匹配,避免整行字符串中的无关内容干扰匹配结果。
- 正则添加
re.IGNORECASE标志,覆盖PNG/png、JPEG/jpeg等大小写组合的后缀。 - 增加空数据判断,防止无请求时出现除以0的运行时异常。
内容的提问来源于stack exchange,提问作者qwertyuiop
相关产品推荐
相关产品推荐

