日志读取脚本

功能:用于读取某日志文件,可指定某个匹配条件,返回文本中匹配到的该行和前面的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)

使用命名元组分段处理一个csv的文件

文件样例:

name,gender,email,phone,sn

huairen,man,huai@adminblog.com,1899000001,17829

huairen,man,huai@adminblog.com,1899000001,17829

代码实例:#!/usr/local/python27/bin/python2.7

import sys

import csv

from collections import namedtuple

l1=[]

with open(sys.argv[1],'rb') as f:

reader = csv.reader(f)

nametup = namedtuple("tup",reader.next())

for line in reader:

l1.append(nametup(*line))

print(l1)

命名元组的使用实例:

输出结果:

tup(name='huairen', gender='man', email='huai@adminblog.com', phone='1899000001', sn='17829')

python脚本入门_python 脚本学习(一)相关推荐

  1. python初步入门_python如何入门

    不少新手总是纠结是学 Python2 还是 Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼,因为它们 是同一种语言,只有少部分地方语法不兼容,尽管目前大部分公司还在 ...

  2. python自动化测试脚本实例_Python+Selenium学习--自动化测试用例实例

    前言 之前我们简单讨论了手工测试用例与自动化测试用之间的差异,以及自动化测试用例设计时的注意事项,这一节就通过实例向读者介绍如何编写具体的自动化测试用例. 下面我以百度云盘为例: 百度云盘是百度的产品 ...

  3. python简单入门_Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数--整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

  4. python编程入门经典教程-2020年5个经典python编程入门视频教程推荐学习

    近三年,python在一二线城市,越来越火热了!企业的需求也是python编程学习者的动力!python学习网整理了适合于零基础朋友的5个python编程入门视频课程,这些都是python编程入门经典 ...

  5. python语言入门p-MicropPython的学习,如何从0到1?

    是Java还是C++ ? 是Go还是Python? 你为你最爱或者最熟悉的编程语言打Call了吗? Python在国外是一门非常热门的编程语言,近些年在国内也被发掘与追捧, Python的开放.简洁. ...

  6. python编程入门视频-2020年5个经典python编程入门视频教程推荐学习

    近三年,python在一二线城市,越来越火热了!企业的需求也是python编程学习者的动力!python学习网整理了适合于零基础朋友的5个python编程入门视频课程,这些都是python编程入门经典 ...

  7. php java python容易入门_先学习Python之后再学习PHP与java会更好吗

    学过python语言之后在去学习PHP javascript 这些编程语言是不是会更好的能快速理解, 有python基础之后,再去学习php语言 理解上 是不是更方便上手, 我现在主要想学习专研 PH ...

  8. python仿真入门_python simulation入门

    python仿真入门-Simulation(1) --用一个简单的例子来开始 1.简单问题 扔三枚硬币,设在投掷3次朝上后,我们已经总计投掷了X次.求投掷六次以上的概率P(x>6)和期望E(X) ...

  9. python xpath入门_python爬虫入门实战(三)!xpath 和 csv!

    最近有小伙伴说正则表达式学不懂?那有什么替代方案呢?一起往下看吧! 在前两篇文章我们已经学了一些基本技巧.但是之前都是用正则表达式来解析内容的,可能有小伙伴对正则表达式不理解,于是乎,我找到一个相对好 ...

最新文章

  1. 我的第一个Windows Phone 7应用程序
  2. Android之android studio如何获取证书指纹 (SHA1)
  3. 什么是 NoSQL 数据库、NoSQL 与 SQL 的区别
  4. 您如何轻松地水平居中 div 使用CSS? [重复]
  5. Python 语言程序设计(1)
  6. 阿里云前端周刊 - 第 18 期
  7. 无线发射机中的正交上变频技术--USRP X410软件无线电平台开发
  8. 计算机识别键盘流程,电脑键盘拼音打字操作过程
  9. 红蓝对抗之win10 权限提升
  10. 坐标转换 | 高斯坐标转经纬度坐标
  11. JavaScript 全栈工程师培训教程 - 阮一峰
  12. 交换机生成树相关实验
  13. Skin Pack Auto UXThemePatcher-Win8 UXTheme桌面主题破解补丁
  14. 好用免费的FTP软件工具推荐,支持中文 速来领取
  15. 原生android 操作系统,为什么氢OS被称为最接近原生安卓的操作系统?
  16. 实话谈扶贫第一篇——教育扶贫
  17. matlab中双x轴,【转】MATLAB:双X轴曲线绘图
  18. 1.大数据存储选型——何时用hbase
  19. ccs读取dat文件c语言程序,CCS中dat文件的格式
  20. 世界淡水资源占水资源的多少_世界上可用淡水资源到底是多少

热门文章

  1. QObject::startTimer: Timers cannot be started from another thread [使用自定义信号与曹函数来解决在子线程中不能调用QTimer定时器]
  2. vmware虚拟机网络模式
  3. AT:关闭PSM和EDRX模式
  4. mysql意外关闭xampp_错误:MySQL意外关闭xampp 3.2.4
  5. 无人车前轮转向参数校准分析
  6. c语言二叉树链式存储,C语言 二叉树的链式存储实例
  7. 1844. 将所有数字用字符替换
  8. 在Angular中添加第三方库jQuery、bootstrap
  9. 要使一个问题能够用计算机解决,如何正确并解决在使用计算机中的问题?
  10. PCL 1.8.1 在VS2015中配置 包含目录、库目录和附加依赖项