task1:

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

代码实例:

1
2
3
4
5
6
7
8
9
10
11
#!/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判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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 in find_c_source(sys.argv[1]):
        print f

输出结果:

task3

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

代码实例:

输出结果:

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

task4

完成日期格式的替换

代码实例:

1
2
3
4
5
6
#!/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匹配的内容。

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

输出结果:

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

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

1
2
3
4
5
6
7
8
9
10
11
#!/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

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

代码实例:

1
2
3
4
5
#!/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)"

代码实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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 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 in tokenizer(pat,expr):
        print (t)

输出结果:

本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1691231

python 脚本学习(二)相关推荐

  1. 4. Python脚本学习实战笔记四 新闻聚合

    4. Python脚本学习实战笔记四 新闻聚合 本篇名言:"人言纷杂,保持自我:工作勤奋,娱乐适度:对待朋友,不玩心术:处理事务,不躁不怒:生活讲究,量入为出:知足常乐,一生幸福!" ...

  2. 阅读开源Python脚本学习笔记1,之python异常

    今天开始阅读一个python脚本写的开源工具,下面会将阅读中遇到的问题以及解决办法都记录在这一系列文档里面 第一天 今天遇到 python 捕捉异常的问题.相信很多python 开发人员,在编写pyt ...

  3. 电影评论分类(python深度学习——二分类问题)

    记:二分类问题应该是应用最广泛的机器学习问题,电影评论分类是指根据电影评论的文字内容,将其划分为正面评论或者是负面评论,是一个二分类问题,我从头到尾学习了代码,并且进行了整理,有的内容是个人理解,如有 ...

  4. 节点精灵免Root安卓辅助脚本学习二:基本知识

    文章目录 一.检点检索 1.1find() 检索一个节点 1.1.1第一步:创建脚本 1.1.2第二步:创建一个demo 1.1.3第三步:运行脚本 1.2finds() 检索一组节点 二.检索规则 ...

  5. Python基础学习二

    在Python中,最基本的数据结构(通过某种方式组织在一起的数据元素的集合)是序列.Python包含6种内建序列,即列表.元组.字符串.unicode字符串.buffer对象和xrange对象. 1. ...

  6. Python爬虫学习二

    1.selenium自动测试工具 2.主要使用selenium的目的是跳过登录验证3.下载驱动器下载请求库 ''' from selenium import webdriver import time ...

  7. Unity2D横版游戏开发-游戏框架构建脚本学习(二)

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using U ...

  8. Windows bat脚本学习二(命令窗口指令)

    1.cd 显示当前目录名或改变当前目录 1.%cd% 显示当前目录, 例如: @echo off echo hello world echo %cd% pause 结果为: 2.cd [路径] 切换当 ...

  9. python爬虫学习(二) 简易网页爬取

    先在网页进行搜索 得到url https://www.sogou.com/web?query=波晓张&_asf=www.sogou.com&_ast=&w=01019900&a ...

最新文章

  1. 远程协助软件开发_这是我从事远程软件开发人员工作的主要技巧
  2. Java并发编程:JMM和volatile关键字
  3. 试试这款针对JAVA应用的开源防火墙!
  4. Android拖拽详解
  5. Nginx配置反向代理与负载均衡
  6. JNI编程基础(二)——Android Studio NDK开发
  7. QMQ顺序消息设计与实现
  8. C语言实现阿姆斯特朗数armstrong number算法(附完整源码)
  9. 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
  10. jzoj5231-序列问题【分治】
  11. 基于Springboot+vue开发实现自行车租赁管理系统
  12. 计算机设备统计报告,中国互联网络发展状况统计报告-中国科学院计算机网络信息中心.DOC...
  13. PS常用工具理解及常用快捷键大全
  14. iOS 列表三级展开
  15. 优先队列式分支限界法,完成这n个任务在k个机器的最佳调度。
  16. vscode快速生成HTML模板
  17. 高等数学(总结9-多重积分)
  18. 朱嘉明:数字经济和非同质时代——NFT
  19. 发现一个好办法-有问题可以到UNITY论坛搜索
  20. 七牛云绑定阿里云域名

热门文章

  1. php的list函数
  2. 【剑指offer】_15数组中重复的数字
  3. 【剑指offer】_09二叉搜索树的后序遍历序列
  4. c++的STL--1概念通述
  5. 计算机网络【3】网络层
  6. 操作系统【四】分页存储管理
  7. Linux网络编程“惊群”问题总结
  8. 链表逆序的原理及实例
  9. Linux系统编程(二)孤儿进程和僵尸进程
  10. 进程间通信————无名管道