python_查找文件中字符串出现的次数

查找日志文件中字符串出现的次数;

# 统计字符串的次数
def findStr(str, filePath):
    with open(filePath, 'r') as f:
        counts = 0
        for line in f.readlines():
            time = line.count(str)
            counts += time
        print("%s出现的次数:%d" % (str, counts))
        return counts


# 匹配的字符串
str_ct = "Msfl run once consumed time"
str_ft = "filtering time"

filePath = r'E:\2024-04-27-11-13-14\localization_ros_x86_64.ubuntu2004.invalid-user.log.INFO.20240429-073803.3899'

count_ct = findStr(str_ct, filePath)
count_ft = findStr(str_ft, filePath)
print("总的融合次数:", count_ft, "次,超过10ms的融合次数:", count_ct, "次,10ms内融合次数占比:",
      round((count_ft - count_ct) / count_ft * 100, 2), "%")

根据需要进行拓展

# 统计字符串的次数
from datetime import datetime
import os
import re


def findStr(str, filePath):
    with open(filePath, 'r') as f:
        counts = 0
        for line in f.readlines():
            time = line.count(str)
            counts += time
        print("%s匹配次数:%d;" % (str, counts))
        return counts


# 匹配的字符串
# 原始gnss数据
str_origin = "origin gnss data"
# 点云数据
str_cloud = "received cloud message"
# 多源融合时间
str_ft = "filtering time"
# 多源融合超过10ms
str_msfl = "Msfl run once consumed time"
# 激光雷达,Correct by lidar odometry. is_fusion_succeeded = 1, filtering time:1666841933.607384, laser odom time: 1666841933.478789
str_lidar = "laser odom time"
# ins车速融合,CorrectLocalization = 1, filtering time: 1666841933.833645, vehicle speed time: 1666841933.833645, vehicle speed: 0.002640
str_vehicle = "vehicle speed time"
# gnss融合,CorrectLocalization = 1, filtering time:1666841933.397890, gnss time: 1666841933.397890
str_gnss = "gnss time"
# 视觉融合,CorrectLocalization = 1, filtering time:1666841933.397890, visual time: 1666841933.397890
str_visual = "visual time"
# 激光雷达扫描匹配耗时,lidar locator scan match consume time: 119.188 ms
str_lidar_consume = "lidar locator scan match consume time"
# str_lidar_consume_end = "ms"


filePath = r'E:\20200127224930\localization.ubuntu2004.root.log.INFO.20240528-023802.651'

# 统计关键字匹配次数
count_origin = findStr(str_origin, filePath)
count_cloud = findStr(str_cloud, filePath)
count_msfl = findStr(str_msfl, filePath)
count_ft = findStr(str_ft, filePath)
count_lidar = findStr(str_lidar, filePath)
count_vehicle = findStr(str_vehicle, filePath)
count_gnss = findStr(str_gnss, filePath)
count_visual = findStr(str_visual, filePath)
count_lidar_consume = findStr(str_lidar_consume, filePath)
rate = round((count_ft - count_msfl) / count_ft * 100, 4)


# 统计激光雷达扫描、融合解算的耗时
def consumed_time(filePath, pattern):
    results = []
    with open(filePath, 'r') as file:
        for line in file:
            # 首尾关键词匹配
            if pattern in line:
                # 以空格隔断,把倒数第二列的耗时,添加到列表中
                col = line.split(' ')
                results.append(float(col[-2]))
    return results


# 激光雷达扫描耗时
lidar_consumed = consumed_time(filePath, str_lidar_consume)
average_lidar = round(sum(lidar_consumed) / len(lidar_consumed), 4)
max_value_lidar = max(lidar_consumed)
min_value_lidar = min(lidar_consumed)
count_50p_lidar = 0
for dt in lidar_consumed:
    if dt >= 50:
        count_50p_lidar += 1
rate_50p_lidar = round(count_50p_lidar / len(lidar_consumed) * 100, 4)

# 融合解算耗时
msfl_consumed = consumed_time(filePath, str_msfl)
average_msfl = round(sum(msfl_consumed) / len(msfl_consumed), 4)
max_value_msfl = max(msfl_consumed)
min_value_msfl = min(msfl_consumed)
count_50p_msfl = 0
for dt in msfl_consumed:
    if dt >= 50:
        count_50p_msfl += 1
rate_50p_msfl = round(count_50p_msfl / len(msfl_consumed) * 100, 4)

# 存放文件
file_dir = os.path.dirname(filePath)
t = datetime.now().strftime("%m%d%H%M")
target_path = os.path.join(file_dir, '统计融合时间&次数_' + t + '.txt')

with open(target_path, 'w') as resultfile:
    result = f"原始gnss数据:{count_origin}条,点云数据:{count_cloud}条;" + '\n' + \
             f"激光雷达扫描匹配:{count_lidar_consume}次,超过50ms耗时占比:{rate_50p_lidar}%,其中平均耗时:{average_lidar}ms,最小耗时:{min_value_lidar}ms,最大耗时:{max_value_lidar}ms;" + '\n' + \
             "激光雷达融合次数:%d次,ins车速融合次数:%d次,gnss融合次数:%d次,visual视觉融合次数:%d次;" % (
                 count_lidar, count_vehicle, count_gnss, count_visual) + '\n' + "总的融合次数:" + str(
        count_ft) + "次,融合耗时10ms内占比:" + str(rate) + "%,融合耗时超过10ms的次数:" + str(
        count_msfl) + "次,其中平均耗时:" + str(average_msfl) + "ms,最小耗时:" + str(int(
        min_value_msfl)) + "ms,最大耗时:" + str(int(max_value_msfl)) + "ms。"
    print(result)
    resultfile.writelines(result)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值