8.9.1 扩展多重剪贴板(扩展8.6项目)
题目:
扩展本章中的多重剪贴板程序,增加一个delete<keyword>命令行参数,它将从shelf中删除一个关键字。然后添加一个delete命令行参数,它将删除所有关键字。
代码:
import shelve, pyperclip, sys
mcbShelf = shelve.open('mcb')
if len(sys.argv) == 3:
if sys.argv[1].lower() == 'save':
mcbShelf[sys.argv[2]] = pyperclip.paste()
elif sys.argv[1].lower() == 'delete':
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]])
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.
结果应该打印到屏幕上, 并保存为一个新的文本文件。
代码:
import re
file = open('test.txt')
words = file.read()
file.close()
keywordsRegex = re.compile('ADJECTIVE|NOUN|VERB|ADVERB')
mo = keywordsRegex.findall(words)
for keyword in mo:
keyword = keyword.lower()
if keyword == 'adjective':
replaceword = input(f'Enter an {keyword}:\n')
else:
replaceword = input(f'Enter a {keyword}:\n')
words = keywordsRegex.sub(replaceword,words,1)
print(words)
file = open('newtest.txt','w')
file.write(words)
file.close()
运行结果:
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.
8.9.3 正则表达式查找
题目:
编写一个程序,打开文件夹中所有的.txt文件,查找匹配用户提供的正则表达式的所有行。结果应该打印到屏幕上。
代码:
import re,os
path = input("输入要处理的文件夹绝对路径:")
#text = input("输入你的自定义正则表达式:")
text = r'{}'.format(input("请输入自定义正则表达式:"))
userdefinedRegex = re.compile(text)
list_dir = os.listdir(path)
for x in list_dir:
mo = re.compile(r'.+\.txt$').search(x)
if mo == None:
continue
else:
file = open(os.path.join(path,mo.group())).read()
resultList = userdefinedRegex.findall(file)
print('\n'.join(resultList))
问题:
通过input得到的text之后用正则表达式并不能获得所需结果,结果为None,但如果直接将text赋值为正则的字符串可以得到正确结果。修改:由于input直接得到的结果不是r''这种的,所以需要转换。