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列表中。
        words.extend(re.split(r‘\s*[;,\.\s]\s*‘,line))
    print(words)

task2:

有一个目录,保存了若干文件,找出其中所有的C源文件

解决方法:

  • listdir
  • 使用os.path分割后缀
  • 使用str.endswith判断
#!/usr/local/python27/bin/python2.7
import os
import sys

def find_c_source(path):
#os.listdir方法返回指定路径下的所以文件及文件夹对象;
    for filename in os.listdir(path):
#str.endswith方法专用于做文件后缀名判断,可接受文件名后缀作为参数传入,如果传入单个参数则匹配此后缀的文件名,如果以元组的形式传入多个参数则是或的关系,会把对应的都匹配出来。  
        if filename.endswith((".c",".h")):
            yield filename

if __name__ == ‘__main__‘:
    for f in find_c_source(sys.argv[1]):
        print f

输出结果:

task3

实现一个脚本可接受两个参数,第一个参数为需要查找的路径,第二个参数为需要匹配的文件可以支持通配符,返回匹配到的文件。

代码实例:

输出结果:

glob模块也可以实现通配符查找功能

task4

完成日期格式的替换

代码实例:

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

text = "Today is 09/03/2015,next time 09/06/2015"
new_text = re.sub(r‘(\d{2})/(\d{2})/(\d{4})‘,r‘\3-\1-\2‘,text)
print (new_text)

re.sub (pattern模式,repl替换后的形式,string输入的字符串,count,flags)

repl参数,可以通过位置参数引用pattern匹配的内容。

r‘\3-\1-\2‘ #分别表示匹配到的年,月,日;

输出结果:

Today is 2015-09-03,next time 2015-09-06

附加功能:将月份的显示转成单词的表示形式

#!/usr/local/python27/bin/python2.7
import re
from calendar import month_abbr

#引入日历模块calendar.month_abbr方法实现转换;
def repl(match_obj):
    return ‘%s-%s-%s‘ % (match_obj.group(3),month_abbr[int(match_obj.group(1))],match_obj.group(2))

text = "Today is 09/03/2015,next time 09/06/2015"
new_text = re.sub(r‘(\d{2})/(\d{2})/(\d{4})‘,repl,text)
print (new_text)

输出结果:

Today is 2015-Sep-03,next time 2015-Sep-06

task5

使用字符串格式化,创建一个模版引擎,可以使用变量来填充模版

代码实例:

#!/usr/local/python27/bin/python2.7
orgin_text = "{name} has {n} messages"

text = orgin_text.format(name="tuchao",n=37)
print (text)

输出结果:

tuchao has 37 messages

task6

根据示例完成一个表达式解析引擎tokenizer

expr = "( src in 10.0.0.0/24 & !(src = 10.0.0.1)) | (src in 127.0.0.0/8 | dst in 127.0.0.0/8)"

代码实例:

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

import re
from collections import namedtuple

#定义一个命名元组
Token = namedtuple("Token",["type","value"])

def tokenizer(pat,text,ignore=[‘SPACE‘, ]):
    scanner = pat.scanner(text)
#使用scanner.match方法匹配每一个语法的正则表达式    
    for m in iter(scanner.match,None):
        if m.lastgroup not in ignore:
            yield Token(m.lastgroup,m.group())
#m.lastgroup返回匹配到命名表达式的模式名称,m.group()返回匹配对应的值;
if __name__ == ‘__main__‘:
    expr = "( src in 10.0.0.0/24 & !(src = 10.0.0.1)) | (src in 127.0.0.0/8 | dst in 127.0.0.0/8)"
#定义各项命名的匹配模式    
    SRC = r‘(?P<SRC>src)‘
    DST = r‘(?P<DST>dst)‘
    IN = r‘(?P<IN>in)‘
    SYMBOL = r‘(?P<SYMBOL>[&\|!]+)‘
    NETWORK = r‘(?P<NETWORK>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/\d{1,2})‘
    IPADDR = r‘(?P<IPADDR>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})‘
    EQ = r‘(?P<EQ>=)‘
    BRACKETS = r‘(?P<BRACKETS>[\(\)]+)‘
    SPACE = r‘(?P<SPACE>\s+)‘
#编译表达式,用或条件连接各个表达式    
    pat = re.compile("|".join([SRC,DST,IN,SYMBOL,NETWORK,IPADDR,EQ,BRACKETS,SPACE]))
    print(expr)
    for t in tokenizer(pat,expr):
        print (t)

输出结果:

时间: 2024-12-15 17:02:46

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 脚本学习笔记(五)集中式病毒扫描,端口扫描以及分段数据库操作

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

python 脚本学习(一)

日志读取脚本 功能:用于读取某日志文件,可指定某个匹配条件,返回文本中匹配到的该行和前面的n行. 此脚本可以接受3个参数,分别是文件对象.搜索的关键词.返回匹配的该行前面的行数. #!/usr/local/python27/bin/python2.7 import sys from collections import deque def search(f,pattern,keep_num): #定义一个队列,设置最大队列数,这个队列中的数据是可覆盖的,如果达到了最大队列数,则新加入的数据会覆盖

tcl脚本学习二:特殊符号学习

lesson 2 :特殊符号学习 ! example ① : set Z "zhou li "set Z_LABEL "boy " puts "$Z_LABEL $Z"puts "$Z_LABEL \$Z" // 可通过 \将特殊符号输出,和C语言一样 example ② : 1. puts "\nI have $100.00 bill"//如果这样会报错 :提示100.00非法 ps: \n是换行 2.

Shell脚本学习二:Shell中的算术运算

Linux中有四种算术运算,分别是expr,let,$[],$(()). 下面分别介绍一下这四种算术运算的使用方法 一.expr的用法 [[email protected] ~]# expr 1 + 2 3 [[email protected] ~]# expr 1 - 2 -1 [[email protected] ~]# expr 8 + 6 14 [[email protected] ~]# expr 8 - 6 2 [[email protected] ~]# expr 8 \* 6 4

Python Tutorial 学习(二)--Using the Python Interpreter

Using the Python Interpreter 2.1. Invoking the Interpreter The Python interpreter is usually installed as /usr/local/bin/python on those machines where it is available; putting /usr/local/bin in your Unix shell’s search path makes it possible to star