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("""<html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <title>Title</title>
                </head>
                <body>""")

        for item in linkList:
            m = re.match(patt, item)
            href = "<a href=%s>%s</a><br>"
            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("""</body>
        </html>""")


def main():
    path = "linktest.html"
    lyst = ["http://www.baidu.com baidu.com",
            "http://www.google.com"]

    genhtml(path, lyst)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python核心编程(第3版)源代码 $ ls -lR .: total 60 drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:02 ch01 drwxr-xr-x 2 wesc wesc 4096 Feb 25 02:32 ch02 drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:06 ch03 drwxr-xr-x 2 wesc wesc 4096 Feb 27 13:09 ch04 drwxr-xr-x 2 wesc wesc 4096 Feb 28 02:52 ch05 drwxr-xr-x 2 wesc wesc 4096 Feb 27 14:35 ch06 drwxr-xr-x 2 wesc wesc 4096 Feb 28 02:52 ch07 drwxr-xr-x 3 wesc wesc 4096 Feb 27 01:51 ch08 drwxr-xr-x 2 wesc wesc 4096 Feb 27 14:48 ch09 drwxr-xr-x 2 wesc wesc 4096 Feb 29 01:49 ch10 drwxr-xr-x 4 wesc wesc 4096 Feb 29 23:35 ch11 drwxr-xr-x 2 wesc wesc 4096 Feb 29 01:50 ch12 drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:05 ch13 drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:05 ch14 drwxr-xr-x 2 wesc wesc 4096 Feb 29 22:07 ch15 -rw-r--r-- 1 wesc wesc 0 Mar 1 00:03 README.html ./ch01: total 40 -rwxr-xr-x 1 wesc wesc 643 Feb 25 02:06 gendata3.py -rwxr-xr-x 1 wesc wesc 591 Feb 25 02:08 gendata-64b.py -rwxr-xr-x 1 wesc wesc 620 Feb 25 02:08 gendata.py -rwxr-xr-x 1 wesc wesc 745 Feb 25 02:12 gendataU.py -rw-r--r-- 1 wesc wesc 347 Feb 25 02:31 README.html -rwxr-xr-x 1 wesc wesc 236 Feb 23 23:05 retasklist.py -rwxr-xr-x 1 wesc wesc 209 Feb 25 02:11 rewho3-hacker.py -rwxr-xr-x 1 wesc wesc 162 Feb 23 22:51 rewho3.py -rwxr-xr-x 1 wesc wesc 157 Feb 23 22:49 rewho.py -rwxr-xr-x 1 wesc wesc 205 Feb 23 23:01 rewhoU.py ./ch02: total 60 -rw-r--r-- 1 wesc wesc 452 Feb 25 02:32 README.html -rwxr-xr-x 1 wesc wesc 429 Sep 11 2010 tsTclnt3.py -rwxr-xr-x 1 wesc wesc 424 Sep 11 2010 tsTclnt3V6.py -rwxr-xr-x 1 wesc wesc 400 Sep 11 2010 tsTclnt.py -rwxr-xr-x 1 wesc wesc 413 Sep 11 2010 tsTclntSS.py -rwxr-xr-x 1 wesc wesc 724 Sep 11 2010 tsTclntTW.py -rwxr-xr-x 1 wesc wesc 395 Sep 11 2010 tsTclntV6.py -rwxr-xr-x 1 wesc wesc 665 Sep 11 2010 tsTserv3.py -rwxr-xr-x 1 wesc wesc 666 Sep 11 2010 tsTserv3V6.py -rwxr-xr-x 1 wesc wesc 560 Mar 18 2009 tsTserv.py -rwxr-xr-x 1 wesc wesc 492 Mar 18 2009 tsTservSS.py -rwxr-xr-x 1 wesc wesc 535 Sep 11 2010 tsTservTW.py -rwxr-xr-x 1 wesc wesc 561 S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值