前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >疯狂填词

疯狂填词

作者头像
披头
发布2020-11-20 10:25:23
7520
发布2020-11-20 10:25:23
举报
文章被收录于专栏:datartisan

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
The silly panda walked to the chandelier and then screamed. A nearby pickup truck was 
unaffected by these events.

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

------------------------- 华丽的分割线 ------------------------

程序分解:

  1. 打开原文件
  2. 编写匹配字符串的正则表达式
  3. 逐行读取(要删除换行符),匹配正则,提示用户输入待替换字符并完成替换
  4. 逐行将替换后的新内容(记着添加换行符)写入新文件(所以要先打开一个文件,采用追加更新模式 'a+'
  5. 关闭打开的文件,释放内存。

程序代码如下:

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐享数据8090 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档