如何用Python统计含oct行中的302、304状态码数量?
修改Python脚本统计含"oct"行中的302/304状态码数量
问题描述
我编写了一个Python脚本,用于统计文本文件中所有包含"302"和"304"状态码的行数总数。现在想修改脚本,使其仅统计同时包含"oct"字符串的行中的这些状态码数量。我目前尝试的代码如下:
file = open('backup.txt','r') codes = ["302", "304"] total = 0 codesInOct = 0 lines = file.readlines() for line in lines: if any(code in line for code in codes): total+=1 print('Total 3xx redirects: ', total) for line in lines: if "oct" in line: if any(code in line for code in codes): codesInOct+=1 print('3xx redirects in october: ', codesInOct)
优化实现方案
你当前的代码已经实现了目标功能,但可以做些优化,让代码更简洁高效:
- 合并循环减少遍历次数:无需两次遍历所有行,一次遍历就能同时统计总数和目标数量
- 用with语句管理文件:自动处理文件关闭,避免资源泄漏
- 可选大小写兼容:如果"oct"可能有大小写变体(如"Oct"、"OCT"),可统一转小写判断
优化后的代码:
codes = {"302", "304"} # 集合查询效率比列表更高 total = 0 codes_in_oct = 0 with open('backup.txt', 'r') as file: for line in file: # 逐行读取,节省内存,适合大文件 line_lower = line.lower() has_code = any(code in line for code in codes) if has_code: total += 1 # 统一用小写判断,兼容不同大小写的"oct" if "oct" in line_lower: codes_in_oct += 1 print(f'Total 3xx redirects: {total}') print(f'3xx redirects in october: {codes_in_oct}')
关键说明
- 集合查询:将
codes改为集合,in操作的查询效率会显著提升,尤其当状态码数量较多时 - 逐行读取:直接遍历文件对象,无需用
readlines()一次性加载所有行到内存,处理大文件时更友好 - 大小写兼容:通过
line.lower()把行内容转成小写后判断"oct",能避免因大小写差异导致的漏统计
内容的提问来源于stack exchange,提问作者Zchapspace
相关产品推荐
相关产品推荐

