从文件中读取字符串,替换它,并将其存储在新文件中。(Python 3.x)

从文件中读取字符串,替换它,并将其存储在新文件中。(Python 3.x),python,Python,创建一个Mad Libs程序,读取文本文件,并允许用户在文本文件中出现单词形容词、名词、副词或动词的任何位置添加自己的文本。例如,文本文件可能如下所示: 形容词panda依次指向名词和动词。附近的一个名词是 不受这些事件的影响 程序将查找这些事件并提示用户替换它们 Enter an adjective: silly Enter a noun: chandelier Enter a verb: screamed Enter a noun: pickup truck 然后将创建以下文本文件: 愚蠢

创建一个Mad Libs程序,读取文本文件,并允许用户在文本文件中出现单词形容词、名词、副词或动词的任何位置添加自己的文本。例如,文本文件可能如下所示:

形容词panda依次指向名词和动词。附近的一个名词是 不受这些事件的影响

程序将查找这些事件并提示用户替换它们

Enter an adjective:
silly
Enter a noun:
chandelier
Enter a verb:
screamed
Enter a noun:
pickup truck
然后将创建以下文本文件:

愚蠢的熊猫走向吊灯,然后尖叫起来。附近的一辆皮卡车没有受到这些事件的影响

结果应打印到屏幕上并保存到新的文本文件中

我的代码:

import os

InputFile = open('FileOne.txt','r')
InputContent = InputFile.read()
InputFile.close()

outputFile = open('FileTwo.txt','w')
convert = InputContent
for word in ['NOUN', 'ADJECTIVE', 'VERB']:
    if word in InputContent:
        convert = convert.replace(word, input('Enter %s: ' %word))

outputFile.write(convert)
outputFile.close()
我文件的内容是:名词是形容词person。突然名词动词。名词现在死了

当我运行代码时:

Enter NOUN: Dave
Enter ADJECTIVE: lovely
Enter VERB: screamed.
它创建输出文本文件FileTwo,但它是空的

输出文件应包含

戴夫是个可爱的人。突然,戴夫尖叫起来。戴夫现在死了

我做错了什么


编辑:更改了代码。现在可以了。非常感谢您的帮助:D

在python解释器中尝试简化版本的代码,可以非常清楚地显示错误

>>>convert = ''
>>>convert.replace('abc', '123')
''
您正在使用空字符串“”并将名词(不存在)替换为Dave,其结果仍然是空字符串

然后将空字符串写入FileTwo.txt

解决方案是对InputContent调用replace()

一个简单的例子是

>>>InputContent = 'Hello NOUN, my name is NOUN'
>>>InputContent.replace('NOUN', 'Dave')
'Hello Dave, my name is Dave'
现在您可以看到replace()替换搜索词的所有实例(在本例中为名词)


解决这个新问题将留给您作为练习

这是因为您试图覆盖的变量convert是一个空字符串。因此,当您将输出放入第二个文件时,实际上没有放入任何内容

如果取而代之的是convert,并将其设置为等于InputContent,那么每次替换后,您都将convert设置为等于convert,这样效果很好:

import os

InputFile = open('FileOne.txt','r')
InputContent = InputFile.read()
InputFile.close()

outputFile = open('FileTwo.txt','w')
convert = InputContent
for word in ['NOUN', 'ADJECTIVE', 'VERB']:
    if word in InputContent:
        Convert = convert.replace(word, input('Enter %s: ' %word))
        convert = Convert
outputFile.write(Convert)
outputFile.close()

convert
convert
不同。您已将带有小写字母“c”的
convert
设置为空字符串。然后在循环中用大写字母“c”设置“Convert”。我会更改它。谢谢你的帮助:)很高兴我能帮忙。记住接受答案以关闭线程;)哦,我不知道。完成。