Python核心编程 (第三版) 练习

1.6 练习

1-16

目录

1.6 练习

1-16

1-17


1-16 为gendata.py更新代码,使数据直接输出一redata.txtm而不是屏幕。

#!/user/bin/env python

from random import randrange, choice
from string import ascii_lowercase as lc
from time import ctime, mktime


def gendata():
    tlds = ('com', 'edu', 'net', 'org', 'gov')

    f = open('redata.txt', 'w+')
    for i in range(randrange(5,11)):
        dtint = randrange(mktime((2038,1,18,0,0,0,0,0,0)))
        dtstr = ctime(dtint)
        llen = randrange(4, 8)
        login = ''.join(choice(lc) for j in range(llen))
        dlen = randrange(llen, 13)
        dom = ''.join(choice(lc) for j in range(dlen))
        print('%s::%s@%s.%s::%d-%d-%d' % (dtstr, login, dom, choice(tlds), dtint, llen, dlen))
        f.write('%s::%s@%s.%s::%d-%d-%d\n' % (dtstr, login, dom, choice(tlds), dtint, llen, dlen))
    f.close()

 

1-17 判断在redata.txt中一周的每一天出现的次数(换句话说,读者也可以计算所选择的年份中每个月中出现的次数)

def main():
    gendata()
    patt = r'[A-Za-z]{3}'
    f = open("redata.txt", 'r')
    weeks = {}
    for line in f:
        m = re.match(patt, line)
        if m is not None:
            weeks[m.group()] = weeks.get(m.group(),0) + 1

    print(weeks)

1-18 通过确认整数字段中的第一个整数匹配在每个输出行起始部分的时间戳,确保在redata.txt中没有数据损坏。

patt = r'([\w :]+)::[\w@\.]+::(\d+)-'
    with open("redata.txt", 'r') as f:
        for line in f:
            m = re.search(patt, line)
            if m is not None:
                print(m.group(1), m.group(2))
                if ctime(int(m.group(2))) == m.group(1):
                    print(True)
                else:
                    print(False)

1-29 支持使用圆括号或连字符连接的区号,使用正则表达式匹配800-555-1212、555-1212以及(800)555-1212

((\()?\d{3}(?(2)\)|-))?\d{3}-\d{4}

1-30 生成HTML。

提供一个链接列表(以及可选的简短描述),无论用户通过命令行方式提供、通过来自其他脚本的输入,还是来自于数据库,都生成一个Web页面(.html),该页面包含作为超文本锚点的所以链接,它可以在Web浏览器中查看,允许用户单击这些链接,然后访问相应的站点。如果提供了简短的描述,就使用该描述作为超文本而不是URL。

#!/user/bin/env python genhtml.py
import re

def genhtml(path, linkList):
    with open(path, 'w+') as f:
        patt = '((https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|])(\s(.*))?'
        f.write("""
                
                    
                    Title
                
                """)

        for item in linkList:
            m = re.match(patt, item)
            href = "%s
" if m.lastindex > 1: f.write(href % (m.group(1), m.group(4))) else: f.write(href % (m.group(1), m.group(1))) f.write(""" """) def main(): path = "linktest.html" lyst = ["http://www.baidu.com baidu.com", "http://www.google.com"] genhtml(path, lyst)

 

你可能感兴趣的:(正则表达式,Python)