【卷一】正则三 之数据生成器
说是数据生成器,其实没那么高端啦,就是随机生成一些带时间的邮箱而已,
这是后面我们用来练习的,在这里我们先提前把它解决掉!
参考: 《Python核心编程(3rd)》—P34、P40
# coding: utf-8 # 导入相应的模块并命名为lc from string import ascii_lowercase as lc from random import choice, randrange from time import ctime from sys import maxint
在开始主题前先介绍下上述这些模块, 前方高能!!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # ascii_lowercase是26个小写字母, 相应的, ascii_uppercase就是26个大写字母 2 # 这里lc相当是ascii_lowercase的变量名 3 print lc 4 5 print "-" * 45 6 # choice是从lc中随机抽1个字母,这里重复五次(用for语句),[]表示把结果弄成列表 7 print [choice(lc) for i in range(5)] 8 # randrange(5, 11)是从5~10中随机取1个数, 我们把随机取数重复5次, 并弄成列表 9 print [randrange(5, 11) for i in range(5)] 10 11 print "-" * 45 12 # maxint是一个十位数 13 print maxint 14 # 从0~maxint中取随机一个数, 重复该过程5次, 并弄成列表 15 print [randrange(maxint) for i in range(5)] 16 17 print "-" * 45 18 # time.ctime()函数把整数转换为日期, 从1970年1月1日格林威治时间的午夜开始, 然而我的是儿童节的八点开始 19 # 1970年6月1日早上八点的0秒 20 print ctime(0) 21 # 1970年6月1日早上八点过了120秒/2分钟 22 print ctime(120) 23 # 从maxint这个十位数中随机取一个数, 并用time.ctime()转换为日期 24 print ctime(randrange(maxint))
OK— 简介完毕,正式切入主题!!! —KO
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # coding: utf-8 2 3 from random import choice, randrange 4 # 把我们导入的模块命名为lc, 调用时就不用输入ascii_lowercase这么长的名字了 5 from string import ascii_lowercase as lc 6 from sys import maxint 7 from time import ctime 8 9 # tlds 是高级域名的意思,一般是专门的机构在用的 10 tlds = ("com", "edu", "gov", "net", "org") 11 12 for i in range(randrange(5, 11)): 13 len_time = randrange(maxint) 14 time = ctime(len_time) 15 # login: 登录名, 给它设置4~7个字符 16 login = "".join(choice(lc) for i in range(randrange(4, 8))) 17 # domain: 域名, 给它设置4~12个字符 18 domain = "".join(choice(lc) for i in range(randrange(4, 13))) 19 tld = choice(tlds) 20 print "%s::%s@%s.%s::%d-%d-%d" % (time, login, domain, tld, len_time, len(login), len(domain))
----------------------------------------------------------------------------------------------------
下面就是针对上面的数据生成器所做的一些练习
1-19 提取每行中完整的时间戳(假设我们把数据储存在1.txt这个文本中)
1 # coding: utf-8 2 3 import re 4 5 f = open("1.txt") 6 content = f.read() 7 8 for eachline in content.split("\n"): 9 print re.findall(r"(.+\d):", eachline)
1-20 提取每行中完整的电子邮件地址(接上面的代码)
1 # 下面打’#‘的是方法2 2 print re.findall(r"\w+@\w+.\w+", eachline) 3 # print re.findall(r"::(\.+)::)", eachline)
1-21 仅仅提取时间戳中的月份
print re.findall(r" ([A-Z]\w+)") # 注意引号后面, 括号前面的空格
1-22 仅仅提取时间戳中的年份
print re.findall(r"(\d+):", eachline)
1-23 仅仅提取时间戳中的时间(HH:MM:SS)
print re.findall(r"\d+:\d+:\d+", eachline)
1-24 仅仅从电子邮件地址中提取登录名和域名(25重复)
print re.findall(r"(\w+)@(\w+.\w+)", eachline)
1-26 使用你的电子邮件地址替换每一行数据中的电子邮件地址
print re.sub(r"::(.+)::", eachline)
1-27 从时间戳中提取月,日,年
print re.findall(r"(\w+ \d+) .+ (\d+)", eachline)