【卷一】正则三 之数据生成器

说是数据生成器,其实没那么高端啦,就是随机生成一些带时间的邮箱而已,

这是后面我们用来练习的,在这里我们先提前把它解决掉!

参考: 《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

在开始主题前先介绍下上述这些模块, 前方高能!!

 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

 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)

 

posted @ 2016-08-24 14:58  坏小孩D_R  阅读(386)  评论(0编辑  收藏  举报