Python编程快速上手——让繁琐工作自动化第八章测试题

Python编程快速上手——让繁琐工作自动化(第八章)

8.9.1 扩展多重剪贴板

题目

  • 扩展本章中的多重剪贴板程序,增加一个delete < keyword > 命令行参数,它将从shelf中删除一个关键字。
  • 然后添加一个delete命令行参数,它将删除所有关键字。

分析

  • 使用del mcbShelf[sys.argv[2]](对单个)             mcbShelf.clear()(对群体)

代码

import shelve, pyperclip, sys

mcbShelf = shelve.open('mcb')
# sys.argv从程序外部获取参数的渠道,人机交互
# sys.argv[1]等于yyy.pyw XXX中的"XXX"
if len(sys.argv) == 3:
    if sys.argv[1].lower() == 'save':
        #将剪贴板的值放在“键”为sys.argv[2]的“值”上      
        mcbShelf[sys.argv[2]] = pyperclip.paste()
    elif sys.argv[1].lower() == 'delete':
        #删除shelf值中的某个“键” 
        if sys.argv[2] in mcbShelf:
            del mcbShelf[sys.argv[2]]
            
elif len(sys.argv) == 2:
    #查看当前插入了哪些“键” 
    if sys.argv[1].lower() == 'list':
        pyperclip.copy(str(list(mcbShelf.keys())))
    #将对应“键”的值复制到剪贴板上 
    elif sys.argv[1] in mcbShelf:
        pyperclip.copy(mcbShelf[sys.argv[1]])
    #将shelf值全部删除              #例     .\mcb.pyw delete
    elif sys.argv[1].lower() == 'delete':
        mcbShelf.clear()

mcbShelf.close()

测试

  • 讲真,这个好测试,但不好表达。就不写了
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

8.9.2 疯狂填词

题目

  • 创建个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现ADJECTIVE、NOUN、ADVERB或VERB等单词的地方,加上他们自己的文本。例如,一个文本文件可能看起来像这样:

The ADJECTIVE panda walked to the NOUN and then VERB. A nearby NOUN was unaffected by these events.


程序将找到这些出现的单词,并提示用户取代它们。

Enter an adjective:
silly
Enter a noun:
chandelier
Enter a verb:
screamed
Enter a noun:
pickup truck

以下的文本文件将被创建:


The silly panda walked to the chandelier and then screamed. A nearby pickup truck was unaffected by these events.


结果应该打印到屏幕上,并保存为一个新的文本文件。

分析

  • 读取A文件
  • 正则寻找特殊单词
  • input()特殊单词替换内容
  • 运用正则的正则替换对应的值
  • 将数据写入到B文件

代码

import re
#读取892.txt内容
textA = open(r'.\892A.txt')
madLibsA = textA.read()

#构造正则,用findall方法得到搜索列表
strRegexs = re.compile(r'ADJECTIVE|NOUN|ADVERB|VERB')
listRegex = strRegexs.findall(madLibsA)

#使用sub方法,替换字符串madLibsB的特殊值
madLibsB = madLibsA
for i in listRegex:
    if i[0] == 'A' :
        tmp = input("Enter an " + i.lower() + ':\n')
    else:
        tmp = input("Enter a " + i.lower() + ':\n')
    strRegex = re.compile(r'('+ i +')')
    madLibsB = strRegex.sub(tmp, madLibsB, count=1)

#将数据写入B文件
textB = open(r'.\892B.txt', 'w')
textB.write(madLibsB)
textB.close()

测试

  • 测测测,为了节目效果,额外加了个print(madLibsB)
    测试图
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

8.9.3 正则表达式查找

题目

  • 编写一个程序,打开文件夹中所有的 .txt 文件,查找匹配用户提供的正则表达式的所有行。结果应该打印到屏幕上。

分析

  • 找到所有文件目录
  • 找到所有txt文件
  • 输入正则
  • 打印结果

代码

import re, os
listDir = os.listdir()
listDirTxt = []

#for+if 进阶 初体验
listDirTxt = [i for i in listDir if '.txt' in i]
print(listDirTxt)
# for i in listDir:
#     if '.txt' in i:
#         listDirTxt.append(i)

aim = input("请输入您的正则表达式:\n")
strRegex = re.compile(r'('+ aim +')')
for i in listDirTxt:
    txtFile = open('.\\'+ i +'')
    txt = txtFile.readlines()

    if strRegex.search(str(txt)):
        print(txt)

测试

  • 使用了8.2的数据来测试,可以跳回去看B文件的写入内容
    在这里插入图片描述
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

拓展

txtFile = open(’.\\’+ i +’’)
strRegex = re.compile(r’(’+ aim +’)’)

  • 对sub()方法有特殊的需求,就查看了sub()方法里的其他参数,找到了sub()里有个参数count计数;
    他人对sub()的介绍

AAA.sub(repl, string[, count = 0])

repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认表示替换所有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值