Python实践项目8.9

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''这种的,所以需要转换。

猜你喜欢

转载自blog.csdn.net/sa_hao/article/details/81382429
8.9