创建一个疯狂填词( 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,os
# 切换到当前目录以方便操作
os.chdir(r'D:\python\ch00_book\09_automateTheBoringStuff\ch0892_madLibs')
# 1.打开原文件,采取默认是读模式即可
file1 = open(r'.\test1.txt')
# 打开一个新文件,用来写入,采取追加更新模式
file2 = open(r'.\test2.txt','a+')
# 2.编写正则表达式,忽略大小写
regex_pattern = re.compile(r'(ADJECTIVE|NOUN|ADVERB|VERB)',re.IGNORECASE)
# 3.逐行读取原文件 .read().splitlines()用法会自动去除换行符
for line in file1.read().splitlines():
# 逐行匹配正则
while regex_pattern.search(line):
toChange = regex_pattern.search(line)
# 提示用户输入【要替换的字符】
ans = input('Please input a/an ' + toChange.group() + ':\n')
# 用 sub 正则进行替换
line = regex_pattern.sub(ans,line,1)
# 4.逐行写入替换后的每行字符,并添加换行符,以和原字符样式保持一致
file2.write(line + '\n')
# 5.关闭文件,释放内存
file2.close()
file1.close()