You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

优化实现方案

你当前的代码已经实现了目标功能,但可以做些优化,让代码更简洁高效:

  1. 合并循环减少遍历次数:无需两次遍历所有行,一次遍历就能同时统计总数和目标数量
  2. 用with语句管理文件:自动处理文件关闭,避免资源泄漏
  3. 可选大小写兼容:如果"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:45:33