关于日志文件的一些处理

一、 一个日志文件,行的信息中包括调用的接口名,如何找出日志文件中访问量在前10位的接口。

apis = []                  # 定义空列表用于存放从日志行中取出的接口名with open(‘Log.txt‘) as fr:        # 以行读取日志文件,并在行中截取出接口名存放至apis列表中    for line in fr:        api = line.split(‘ ‘)[4]        apis.append(api)api_set = list(set(apis))         # 为了在统计每个接口名个数时减少循环次数,把接口名列表做了去重处理d = {}                    # 定义空字典用于存放类似“接口名:5”这样的键值对for api in api_set:             # 给每个接口名统计次数并成对存放在字典d里    d[api] = apis.count(api)sorted_api = sorted(d.items(),key = lambda item : item[1],reverse = True )  # 用sorted方法对字典以value值倒叙排序print(sorted_api[:10])           # 打印出倒序序列中的前十项

重点介绍 sorted 方法。sorted方法可用来对字典按key值或value值排序的。sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数,其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序,默认时reverse=false

1.sorted方法按key值对字典排序
mylist = [1,2,1,3,3,1,4,2,1,3,3,5,6,7,1]set_list = list(mylist)d = {}for k in set_list:    d[k] = mylist.count(k)sorted_list = sorted(d.keys())print(sorted_list)

结果是:[1, 2, 3, 4, 5, 6, 7]可以看出,sorted(d.keys())返回了key为元素的列表,value不见了,若想倒序 sorted(d.kyes(),reverse=True)
2.sorted方法按value值对字典排序 要对字典的value排序则需要用到key参数并对其使用lambda表达式的方法。
mylist = [1,2,1,3,3,1,4,2,1,3,3,5,6,7,1]set_list = list(mylist)d = {}for k in set_list:    d[k] = mylist.count(k)sorted_list = sorted(d.items(), key=lambda item:item[1], reverse=True)print(sorted_list)

结果是: [(1, 5), (3, 4), (2, 2), (4, 1), (5, 1), (6, 1), (7, 1)]可以看出结果是以字典的每一个“键值对”为元素的列表,字典里原来的信息没有丢掉。

这里的d.items()实际上是将字典d转换为可迭代对象,迭代对象的元素为原字典的一个键值对元组,如(1,5),items()方法将字典的元素转化为了元组。而这里key参数也就是sorted方法的第二个参数对应的lambda表达式lambda item:item[1],意思则是选取元组中的第二个元素(即 (1,5)中的5)作为比较参数(如果写作key=lambda item:item[0]的话则是选取第一个元素(即(1,5)中的1)作为比较对象,也就是key值作为比较对象。lambda x:y中x表示输出参数,y表示lambda函数的返回值所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。

日后遇到实际问题还会继续在此总结。。。
时间: 2024-10-14 19:44:13

关于日志文件的一些处理的相关文章

SQL存储过程删除数据库日志文件的方法

--日志文件收缩至多少M DECLARE @DBLogSise AS INT SET @DBLogSise=0 --查询出数据库对应的日志文件名称 DECLARE @strDBName AS NVARCHAR(500) DECLARE @strLogName AS NVARCHAR(500) DECLARE @strSQL AS VARCHAR(1000) SELECT @strLogName=B.name, @strDBName=A.name FROM master.sys.databases

expdp导出遇到ORA-39064: 无法写入日志文件

. . 导出了 "USER_XXXX"."TAB_YYYY" 0 KB 0 行 ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误 经过搜索mos,有如下的文章给出了解决方案: Error ORA-39064 Might Be Encountered By DataPump Export (EXPDP) When NLS_LANG Is Different From Database Character Set (Doc ID 1321034

windows服务器清理系统垃圾日志文件

Windows服务器的系统盘如果是2003系统的话那么我们默认给10G的空间就够了,但是有时候我们不经意去查看系统盘的时候发现已经使用了9.9G,其实多是垃圾日志文件占用系统盘空间,使用如下批处理将这些文件删除. 在桌面新建一个文本文档,将如下代码复制进去: @echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %syst

MySQL日志文件与分析

1.查询日志.慢查询日志.二进制日志对比 查询日志 general_log 会记录用户的所有操作,其中包含增删查改等 可以指定输出为表 慢查询日志 slow_log 只要超过定义时间的所有操作语句都记录 可以指定输出为表 二进制日志 log_bin 记录可能执行更改的所有操作 mysqlbinlog查看 2.日志的分析 2.1日志的存储 数据操作过程中,Mysqld是将接收到的语句按照接收的顺序(注意不是执行顺序)写到查询日志文件中.一条一条就类似这样: # Time: 070927 8:08:

用于监控日志文件的是否被修改的脚本

最近一段需要监控观察web服务器上的日志文件是否有写入,用来判断是否服务进程是否是正常,为此就简单写了一个脚本: #!/bin/bash #check_logfile_io.sh #Used to monitor logs I/O #writer jim #histor #2017.3.22 log_file_path=/usr/local/apache/log/access.log First_md5sum=$(/usr/bin/md5sum $log_file_path | awk '{pr

IIS 7 出现日志文件时间与服务器时间不符

最近在分析web日志,发现IIS7日志中时间与系统时间不一致,即本该上班时间才产生 的产并发访问日志,全部发生在凌晨至上班前. 本以为是系统时间设置错误,检查后一切正常.后查询资料,原来是这个原因: 日志的格式有IIS.NCSA.W3C三种: 1.IIS是固定的基于 ASCII 文本的格式,无法自定义记录的字段,字段由逗号分隔, 记录的时间为本地时间文件名前缀为u_in. 2.NCSA是美国国家超级计算技术应用中心 (NCSA) 公用日志文件格式,也是固定的基 于 ASCII 文本的格式,无法自

windows 日志文件查找符合条件的列并统计

因为要将windows每天登陆失败的次数统计, "wevtutil el  "           //列出日志名称 "wevtutil  gl  日志名称" //获取日志配置信息. 你可以使用短(如 ep /uni)或长(如enum-publishers /unicode)形式的命令和选项名称. 命令.选项和选项值不区分大小写. 变量均使用大写形式. wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE

log4net 既要按日期分割日志文件,又要按文件大小分割。

<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> <file value="log\debug\"/> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePatte

(Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译

Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目,选择类库,取名为JefferyChan,具体步骤如下图: 3.因为要调用Unity中的相关文件,所以这里要引入外部文件.首先在Unity的安装文件夹中找到UnityEngine.dll,我的路径是:D:\Program Files (x86)\Unity\Editor\Data\Managed 如

日志文件配置与切割

日志文件配置与切割 自定义日志格式 http { server { listen          80 default; server_name     _*; access_log      logs/default.access.log combined; location / { index index.html; root  /data0/htdocs/htdocs; } } } 其中的  access_log,就是用来配置日志路径的, log_format 指令用于设置日志格式 如果