使用用户输入更改文本文件中的特定单词

Posted

技术标签:

【中文标题】使用用户输入更改文本文件中的特定单词【英文标题】:Change Specific Words in Text File With User Inputs 【发布时间】:2020-11-01 20:05:03 【问题描述】:

我一直在关注“自动化无聊的东西”Python 课程。 一个练习项目需要根据一些用户输入更改 txt 文件中的一段文本。

我的尝试在下面,但我的思维方式仍然是完成工作的冗长方式。我不觉得我的代码是最有效的“pythonic”方法。

有没有更好、更有效的方法来做到这一点?

感谢任何反馈(为了清楚起见,我在代码中留下了注释)。

Replace the words ADJECTIVE, NOUN, ADVERB and NOUN in a passage of text.
Use prompts to input the words to be used.
Print to sceen and save to file.

#Prompt user for the words to add
from pathlib import Path

file = open('Mad Libs.txt', 'w')
file.write('The ADJECTIVE panda walked to the NOUNONE and then VERB. A nearby NOUNTWO was unaffected 
by these events.')
file.close()

print('Enter an adjective: ')
a = input()
print('Enter a noun: ')
nOne = input()
print('Enter a verb: ')
v = input()
print('Enter a noun: ')
nTwo = input()

#Open the file and split the passage into a list??
file = open('Mad Libs.txt')
text = file.read().split()

#Find words in file to be replaced.
aIndex = text.index('ADJECTIVE')
nOneIndex = text.index('NOUNONE')
vIndex = text.index('VERB.')
nTwoIndex = text.index('NOUNTWO')

#Replace each word with the inputs and close.
text[aIndex] = a
text[nOneIndex] = nOne
text[vIndex] = v+'.'
text[nTwoIndex] = nTwo

#Join text back to a readable passage and print to screen.
newText = " ".join(text)
print('\n\n')
print(newText)

#Print the new text to file.
file = open('Mad Libs.txt', 'a')
file.write('\n\n' + newText)
file.close()

谢谢,

斯图尔特

【问题讨论】:

Given pythons list.index 只找到第一次出现,你会发现它并没有像希望的那样替换所有内容。我确信有更好的方法可以做到这一点,但是我会使用 for 循环代替索引,这样您就可以检查所有内容,而不仅仅是第一件事 谢谢,伊桑。是的,原文只有两个名词都显示为“名词”。我将它们更改为 nounone 和 nountwo,以便索引可以工作。我知道会有更好的方法,所以我希望有人能添加到这个...... 如果您需要评论,请转到页面CodeReview BTW index() 有更多选项index(item, start, end),您可以使用第一个noun 的位置开始搜索下一个noun - first = index("noun")second = index("noun", first+1) 【参考方案1】:

我拿了你的代码并评论了我要改变的地方:

Replace the words ADJECTIVE, NOUN, ADVERB and NOUN in a passage of text.
Use prompts to input the words to be used.
Print to sceen and save to file.

#Prompt user for the words to add
from pathlib import Path

file = open('Mad Libs.txt', 'w')
file.write('The ADJECTIVE panda walked to the NOUNONE and then VERB. A nearby NOUNTWO was unaffected 
by these events.')
file.close()

# Use sensible variable names
print('Enter an adjective: ')
adjective = input()
print('Enter a noun: ')
noun1 = input()
print('Enter a verb: ')
verb = input()
print('Enter a noun: ')
noun2 = input()

# Use "with" or close the file afterwards, mention the mode to open
with open('Mad Libs.txt', 'r') as file:
    text = file.read()
# or
file = open('Mad Libs.txt', 'r')
text = file.read()
file.close()

# Use a Dictionary for the Replacements and the .replace method
replacements = 
'ADJECTIVE':adjective
'NOUNONE':noun1
'VERB':verb
'NOUNTWO':noun2


for a, b in replacements.items():
    text = text.replace(a, b)

# Print to screen.
print('\n\n')
print(text)

#Print the new text to file.
file = open('Mad Libs.txt', 'a')
file.write('\n\n' + text)
file.close()

想想用“with”打开文件,舒服多了。 喜欢这本书,我也喜欢它!

【讨论】:

以上是关于使用用户输入更改文本文件中的特定单词的主要内容,如果未能解决你的问题,请参考以下文章

更改崇高文本3中特定单词的颜色

通过用户输入和 Javascript 更改特定表格单元格中的文本

通过 Photoshop 中的脚本更改特定文本的字体

使用批处理删除文本文件中特定单词之前的文本

Android TextView中的下划线和更改文本颜色[重复]

Python:读取文件时如何忽略两个特定单词之间的文本?