博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 脚本学习(二)
阅读量:6914 次
发布时间:2019-06-27

本文共 3058 字,大约阅读时间需要 10 分钟。

task1:

在一个文件中,单词之间使用空格、分号、逗号或者句号分隔,请提取全部单词。

代码实例:

#!/usr/local/python27/bin/python2.7import sysimport rewords = []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.7import osimport sysdef find_c_source(path):#os.listdir方法返回指定路径下的所以文件及文件夹对象;    for filename in os.listdir(path):#str.endswith方法专用于做文件后缀名判断,可接受文件名后缀作为参数传入,如果传入单个参数则匹配此后缀的文件名,如果以元组的形式传入多个参数则是或的关系,会把对应的都匹配出来。          if filename.endswith((".c",".h")):            yield filenameif __name__ == '__main__':    for f in find_c_source(sys.argv[1]):        print f

输出结果:

task3

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

代码实例:

输出结果:

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

task4

完成日期格式的替换

代码实例:

#!/usr/local/python27/bin/python2.7import retext = "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.7import refrom 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.7orgin_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.7import refrom 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)'    DST = r'(?P
dst)'    IN = r'(?P
in)'    SYMBOL = r'(?P
[&\|!]+)'    NETWORK = r'(?P
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/\d{1,2})'    IPADDR = r'(?P
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'    EQ = r'(?P
=)'    BRACKETS = r'(?P
[\(\)]+)'    SPACE = r'(?P
\s+)'#编译表达式,用或条件连接各个表达式        pat = re.compile("|".join([SRC,DST,IN,SYMBOL,NETWORK,IPADDR,EQ,BRACKETS,SPACE]))    print(expr)    for t in tokenizer(pat,expr):        print (t)

输出结果:

转载地址:http://ldxcl.baihongyu.com/

你可能感兴趣的文章
addLoadEvent(func) 不管在页面加载完毕执行多少个函数,都应付自如
查看>>
Android下横竖屏切换的处理
查看>>
进击的JAVA(1)
查看>>
PHP整理笔记五目录与文件
查看>>
在ASP.net中使用OWC绘制统计图表
查看>>
【BZOJ 2440】[中山市选2011]完全平方数
查看>>
SVN学习总结(1)——SVN简介及入门使用
查看>>
嵌入式linux开发uboot移植(三)——uboot启动过程源码分析
查看>>
zabbix-agentd 的配置
查看>>
网站原创文章撰写的5点注意要素
查看>>
Linux 配置Apache服务器 下(虚拟主机,排错)
查看>>
我的友情链接
查看>>
ppp链路的pap认证与chap认证的基本原理和配置
查看>>
[Java] 练习题004: 将一个正整数分解质因数
查看>>
速战速决---3小时快速搭建Exchange+SFB(2)
查看>>
关于VCPROJ文件的说明
查看>>
我的友情链接
查看>>
在主引导记录(MBR)的救援模式下如何重新安装GRUB引导装载程序
查看>>
我的友情链接
查看>>
git的基本使用和示例
查看>>