码迷,mamicode.com
首页 > 其他好文 > 详细

06_模块(二)_正则

时间:2016-06-14 00:50:34      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

 

1 sys

进度条实例

import sys
import time

def view_bar(num, total):
    rate = float(num) / float(total)
    rate_num = int(rate * 100)
    r = ‘\r%d%%‘ % (rate_num, ) # \r从起始位置重新开始
    sys.stdout.write(r)  # 不换行输出
    sys.stdout.flush()  # 清空输出内容

if __name__ == ‘__main__‘:
    for i in range(0, 100):
        time.sleep(0.1)
        view_bar(i, 100)

1.2 os

os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
os.curdir                   返回当前目录: (‘.‘)
os.pardir                   获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dir1/dir2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)         生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()                 删除一个文件
os.rename("oldname","new")  重命名文件/目录
os.stat(‘path/filename‘)    获取文件/目录信息
os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep                  用于分割文件路径的字符串
os.name                     字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command")   运行shell命令,直接显示
os.environ            获取系统环境变量
os.path.abspath(path)       返回path规范化的绝对路径
os.path.split(path)         将path分割成目录和文件名二元组返回
os.path.dirname(path)       返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)      返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)        如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)         如果path是绝对路径,返回True
os.path.isfile(path)        如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)         如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)      返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)      返回path所指向的文件或者目录的最后修改时间

注:黄色选择为必知必会

 

 

1.3 hashlib

用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

1.3.1 md5

import hashlib
# 执行md5时增加特定字符,在原有加密基础上再次加密,提交安全性,预防撞库
obj = hashlib.md5(bytes(‘abcde‘, encoding="utf-8"))
# 获取加密结果
obj.update(bytes(‘123456‘, encoding=‘utf-8‘))
result = obj.hexdigest()
print(result)

# 输出结果
985ae3acc7684c692870900af17ab160

1.4 re 正则表达式

字符:

  . 匹配除换行符以外的任意字符

  \w    匹配字母或数字或下划线或汉字

  \s     匹配任意的空白符

  \d    匹配数字

  \b    匹配单词的开始或结束

  ^     匹配字符串的开始

  $     匹配字符串的结束

次数:

  * 重复零次或更多次

  +     重复一次或更多次

  ?      重复零次或一次

  {n}  重复n次

  {n,} 重复n次或更多次

  {n,m}     重复n到m次

1.4.1 re.findall字符匹配

findall,获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖;空的匹配也会包含在结果中。

findall(pattern, string, flags=0)

1.普通字符

ret = re.findall(‘alex‘, ‘yuanaleSxalexwupeiqi‘)
print("普通字符", ret)

2.元字符

. 任意一个字符
^ 起始位置匹配
$ 结束位置匹配
* 匹配前一个字符0到多次
+ 重复一次或多次
?重复零次或一次
{} 重复n次
[] 或 (^在[]为非)

 

练习:

ret = re.findall(‘al.x‘, ‘yuanaleSxalexwupeiqi‘)
print(".", ret)
ret = re.findall(‘^al.x‘, ‘alexyuanaleSxalexwupeiqi‘)
print("^", ret)
ret = re.findall(‘pei.i$‘, ‘yuanaleSxalexwupeiqi‘)
print("$", ret)
ret = re.findall(‘al.*x‘, ‘yuanaleSxalexwupeiqi‘)
print("*", ret)
ret = re.findall(‘al.+x‘, ‘yuanaleSxalexwupeiqi‘)
print("+", ret)
ret = re.findall(‘al.?x‘, ‘yuanaleSxalexwupeiqi‘)
print("?", ret)
ret = re.findall(‘al.{1,6}x‘, ‘yuanaleSxalexwupeiqi‘)
print("{}", ret)
ret = re.findall(‘a[a-z]+x‘, ‘yuanaleSxalexwupeiqi‘)
print("[]:", ret)

# 输出结果
. [‘alex‘]
^ [‘alex‘]
$ [‘peiqi‘]
* [‘aleSxalex‘]
+ [‘aleSxalex‘]
? [‘alex‘]
{} [‘aleSxalex‘]
[]: [‘alex‘]

1.4.2 re.match

match,从起始位置开始匹配,匹配成功返回一个对象,示匹配成功返回None。

match(pattern, string, flags=0)
# pattern: 正则模型
# string:  要匹配的字符串
# flags:   编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

练习:

ret = re.match(‘com‘, ‘comwww.runcomoob‘).group()
print(ret)
ret = re.match(‘com‘, ‘Comwww.runComoob‘, re.I).group() 
print(ret)

# 输出结果
com
Com

1.4.3 re.search

search,浏览整个字符串去匹配第一个,未匹配成功返回None

search(pattern, string, flags=0)
group()  返回被re匹配的字符串
start()    返回匹配开始的位置
stop()      返回匹配结束的位置
span()    返回一个元组包含匹配(开始,结束)的位置

练习:

a = "123abc456"
ret = re.search("([0-9]*)([a-z]*)([0-9]*)",a)
print(ret.group(0))
print(ret.group(1))
print(ret.group(2))
print(ret.group(3))

# 输出结果
123abc456
123
abc
456

  

1.4.4 re.finditer

finditer,返回一个迭代器

finditer(pattern, string, flags=0)

1.4.5 re.sub

sub,替换匹配成功的指定位置字符串

sub(pattern, repl, string, count=0, flags=0)
# pattern: 正则模型
# repl   : 要替换的字符串或可执行对象
# string : 要匹配的字符串
# count  : 指定匹配个数
# flags  : 匹配模式

练习:

ret = re.sub("g.t","have",‘I get A, I got B, I gut C‘)    #全部更换
print(ret)
ret1 = re.sub("g.t","have",‘I get A, I got B, I gut C‘,2)   #只替换2次
print(ret1)

# 输出结果
I have A, I have B, I have C  
I have A, I have B, I gut C  

1.4.6 re.subn

用法同re.sub,返回值时显示替换几次

ret = re.subn("g.t","have",‘I get A, I got B, I gut C‘)
print(ret)
ret1 = re.subn("g.t","have",‘I get A, I got B, I gut C‘,2)
print(ret1)

# 输出结果
(‘I have A, I have B, I have C‘, 3)
(‘I have A, I have B, I gut C‘, 2)

1.4.7 re.split

split,根据正则匹配分割字符串

split(pattern, string, maxsplit=0, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# maxsplit:指定分割个数
# flags  : 匹配模式

练习:

ret = re.split(‘\d+‘, ‘one1two2three3four4‘)
print(ret)
ret = re.split(‘\d+‘, ‘one1two2three3four‘)
print(ret)

# 输出结果
[‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘‘]   #最后为空,因为按数字分割,数字4后为空
[‘one‘, ‘two‘, ‘three‘, ‘four‘]

1.4.8 re.compile

re.compile,用于将字符串形式的正则表达式编译为Pattern对象。

增加代码复用性,提高效率。

compile(pattern, flags=0)

练习:

text1 = "JGood is a handsome boy, he is cool, clever, and so on ..."
text2 = "Good night, Good morning"

regex = re.compile(r‘\w*oo\w*‘)  # 编译表达式对象

print(regex.findall(text1))  # 对字符串1操作
print(regex.findall(text2))  # 对字符串2操作

# 输出结果
[‘JGood‘, ‘cool‘]
[‘Good‘, ‘Good‘]

1.4.9 正则分组

目的:去已经匹配到的数据中再提取数据

origin = "hello alex bcd alex lge alex acd 19"
r1 = re.split("(alex)", origin, 1)  #以alex为分割符分割字符串,分割一次,并输出分割符alex
print(r1)
r2 = re.split("(al(ex))", origin, 1)  #以alex为分割符分割字符串,并以ex再次侵害,并输出分割符alex
print(r2)


# 输出结果
[‘hello ‘, ‘alex‘, ‘ bcd alex lge alex acd 19‘]
[‘hello ‘, ‘alex‘, ‘ex‘, ‘ bcd alex lge alex acd 19‘]

 

06_模块(二)_正则

标签:

原文地址:http://www.cnblogs.com/liangdalong/p/5582479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!