python 脚本学习(一)

日志读取脚本

功能:用于读取某日志文件,可指定某个匹配条件,返回文本中匹配到的该行和前面的n行。

此脚本可以接受3个参数,分别是文件对象、搜索的关键词、返回匹配的该行前面的行数。
#!/usr/local/python27/bin/python2.7
import sys
from collections import deque

def search(f,pattern,keep_num):
#定义一个队列,设置最大队列数,这个队列中的数据是可覆盖的,如果达到了最大队列数,则新加入的数据会覆盖前面的。
    pre_lines = deque(maxlen=keep_num)
    for line in f:
        if pattern in line:
            yield line,pre_lines
#这里的逻辑就是将从文件对象f中读取的每一行做模式匹配的判断,如果不匹配则放入pre_lines队列中去,继续查找下一行,只保存最大能允许的行数,这个有参数maxlen控制,多出的数据则覆盖前面的,直到匹配到了需要的关键字,则返回一个生成器,生成器中包括了匹配到的行,以及该行之前的n行,也就是之前保存在pre_lines队列中的行。          
        pre_lines.append(line)

if __name__ == ‘__main__‘:
    log_file = sys.argv[1]
    pattern = sys.argv[2]
    keep_num = int(sys.argv[3])
    with open(log_file) as f:
#这个循环就是从search函数返回的生成器中取数据,分别保存在变量中,再分别打印出来。    
        for line,pre_lines in search(f,pattern,keep_num):
            for pline in pre_lines:
                print pline
            print line
            print "-" * 20

键值对处理脚本

处理一个key -> value的配置文件,key可能出现多次,对应相同或者不同的value,要求返回每个key对应的所有不重复的value。

这里先讲下collections模块的defaultdict 和 dict

这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的key, d[key] 也有一个默认值,这个默认值是int()的默认值0.

笔者的理解:

defaultdict接受一个工厂函数作为参数,这个传入的工厂函数的类型,决定了该字典对象中keys的类型和值的类型。

比如 defaultdict(set)这里传入了一个set类型,这表示其中的keys为集合,要在key中加入数据则要使用集合的内置add方法,对应的value也会符合集合的特点,无序性,唯一性。

如果 defaultdict(list) 这里传入了一个list类型,这表示其中的keys为列表,要在key中加入数据则要使用列表的内置方法append,对应的value也会符合列表的特点,有序性,可重复。

处理如下文件:

key1=111

key2=222

key1=111

key1=123

key3=333

key4=111

key5=555

key6=666

key2=222

key7=777

key8=111

要实现返回每个key对应的所有不重复的value,这里要使用set类型。

代码实例:

!/usr/local/python27/bin/python2.7
import sys
from collections import defaultdict

conf = defaultdict(set)

for line in open(sys.argv[1]):
    k,v = line.split(‘=‘)
#由于传入的工厂函数为set,所以这里的key就是集合,要用集合的add方法插入值。
    conf[k.strip()].add(v.strip())   

for k,v in conf.items():
    print "%s => %s" % (k,v)

输出结果:

可以观察到文本中有多个重复的key1=111只输出了一次。

下面传入list类型做对比

输出结果:

有一些任务,需要保存到字典中,key为名称,value为内容,但是在执行的时候,需要保持存储时的顺序。

方法(一)

使用字典保存数据,并附加一个list保存顺序

#!/usr/local/python27/bin/python2.7
import sys

d1=dict()
l1=[]
for line in open(sys.argv[1]):
    k,v = line.split(‘=‘)
    l1.append(k)
    d1[k] = v

print("%s => %s" % ( [ i for i in l1],[ d1[i] for i in l1 ]))

方法(二)

使用OrderedDict

#!/usr/local/python27/bin/python2.7
import sys
from collections import OrderedDict

od = OrderedDict()
for line in open(sys.argv[1]):
    k,v = line.split(‘=‘)
    od[k.strip()] = v.strip()

for k,v in od.items():
    print k,v

一般字典dict()是无序的,但是OrderedDict是有序字典,会按照插入的顺序保存数据。

从一篇英文文章中统计出频率出现最高的10个单词

代码实例:

#!/usr/local/python27/bin/python2.7
import sys
import re
from collections import Counter

with open(sys.argv[1]) as f:
#匹配出所以单词,并且全部转换为小写,保存在一个列表中。
    words = re.findall(r"\w+",f.read().lower())
#Counter方法可以从一个列表中统计每个元素出现的次数,.most_common(n)用于筛选出出现次数最多n项;
    print Counter(words).most_common(10)

输出结果:

./counter.py english_article.txt

[(‘to‘, 16), (‘his‘, 15), (‘him‘, 12), (‘in‘, 12), (‘tyler‘, 9), (‘she‘, 9), (‘and‘, 9), (‘that‘, 8), (‘he‘, 8), (‘i‘, 8)

时间: 2024-12-28 02:47:35

python 脚本学习(一)的相关文章

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

3. 蛤蟆Python脚本学习笔记三字符串

3. 蛤蟆Python脚本学习笔记三字符串 本篇名言:"平静的湖面只有呆板的倒映,奔腾的激流才有美丽的浪花!幸福不是靠别人来布施,而是要自己去赢取!生命的意义在不断挑战自己,战胜自己!" 这个本来放在昨天的,由于昨晚又太晚了,所以就搁在这里了.赶紧看看吧. 字符串两边都用双引号或者单引号包起来.否则就使用转移符号来转移一下. 输入在一起可以直接拼接. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48112507

1.蛤蟆Python脚本学习笔记一环境搭建

1.蛤蟆Python脚本学习笔记一环境搭建 蛤蟆一直在想在工作的时候能不能有一个牛逼的工具来让自己工作更加轻松和快乐.用过C, C++, C#, JAVA,  SHELL,TCL,汇编,BAT等,感觉这些都是需要的时候能发挥作用,不能和我想象的一样.突然有一天,感觉Python实在不错,那么就和小伙伴们一起乐呵乐呵呗.万事开头难,我们先来搭建环境吧. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48058315 1. 相关

Python 脚本学习笔记(四) 定制业务质量报表

一.使用XlsxWriter模块生成Excel表格 安装XlsxWriter模块 pip2.7 install xlsxwriter 官网:http://xlsxwriter.readthedocs.org/ 常用方法说明: Workbook(filename [ options ])用于创建一个workbook对象 创建一个Excel文件 workbook = xlsxwriter.Workbook('chart.xlsx') add_worksheet(sheetname)用于添加一个工作表

python 脚本学习(二)

task1: 在一个文件中,单词之间使用空格.分号.逗号或者句号分隔,请提取全部单词. 代码实例: #!/usr/local/python27/bin/python2.7 import sys import re words = [] with open(sys.argv[1]) as f:     for line in f: #这里使用了re.split()正则表达式分隔符,可以指定一个正则表达式作为分隔符来切分字符串:切分完之后返回一个列表添加到words列表中.         word

Python 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作

Clam AntiVirus是一个免费而且开放源码的防毒软件,软件与病毒库的更新由开源社区免费发布,目前ClamdAV主要为Linux.Uinux系统提供病毒扫描查杀pyClamad是一个python的第三方模块,可让python直接使用ClamAV病毒扫描守护进程clamd来实现一个高效的病毒检测功能. 一.实现集中式的病毒扫描 1.安装clamavp clamd 服务的相关程序包 yum install clamav clamd clamav-update -y chkconfig clam

[简明python教程]学习笔记之编写简单备份脚本

[[email protected] 0503]# cat backup_ver3.py #!/usr/bin/python #filename:backup_ver3.py import os import time #source source=['/root/a.sh','/root/b.sh','/root/c.sh'] #source='/root/c.sh' #backup dir target_dir='/tmp/' today=target_dir+time.strftime('

SecureCRT中python脚本编写学习指南

SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是SecureCRT工具:SecureCRT支持VB.JavaScript.Python等多种脚本语言,为了实现脚本在CRT中更加丰富稳定地执行,掌握CRT的常用函数是非常有用的.接下来的时间我将对SecureCRT脚本编写的常用函数展开学习应用. 内容 (1)使用python语言实现SecureCRT中的D

学习练习程序:根据日期提取日志的python脚本。

#!/usr/bin/python #! *-* coding:utf-8 *-* #file:Analysis_logs.py #import os import string import re month={ '1':'Jan',         '2':'Feb',         '3':'Mar',         '4':'Apr',         '5':'May',         '6':'Jun',         '7':'Jul',         '8':'Aug'