我正在尝试制作一个AutoHotKey脚本,该脚本从您键入的大多数单词中删除字母“ e”。为此,我将在文本文件中放置一个常用单词列表,并让python脚本为每个单词的AHK文件添加正确的语法。为了测试,我的单词列表文件“ words.txt”包含以下内容:
apple
dog
tree
在运行python脚本后,我希望文件'wordsOut.txt'(将变成AHK脚本)中的输出以这种方式结束:
::apple::appl
::tree::tr
如您所见,它将排除不带字母“ e”的单词,并从其他所有内容中删除“ e”。但是当我运行如下所示的脚本时...
f = open('C:\\Users\\jpyth\\Desktop\\words.txt', 'r')
while True:
word = f.readline()
if not word: break
if 'e' in word:
sp_word = word.strip('e')
outString = '::{}::{}'.format(word, sp_word)
p = open('C:\\Users\\jpyth\\Desktop\\wordsOut.txt', 'a+')
p.write(outString)
p.close()
f.close()
输出文本文件最终如下所示:
::apple
::apple
::tree::tr
最奇怪的部分是,尽管它永远无法正确显示,但输出文件中的文本可能会根据输入文件中的行数而变化。
答案 0 :(得分:0)
我将其作为正式回答,而不是发表评论,因为值得指出脱衣舞娘的工作方式,并且要使诸如换行符之类的隐藏字符感到厌倦。
f.readline()
返回每一行,包括'\ n'。因为strip()仅从字符串的开头和结尾除去字符,而不从中间除去字符,因此实际上并未从大多数带有'e'的单词中除去任何字符。实际上,即使是以“ e”结尾的单词也不会删除该“ e”,因为在它的右边有一个换行符。这也解释了:: apple为何打印在两行上。
'hello\n'.strip('o')
输出'hello\n'
而'hello'.strip('o')
输出'hell'
正如评论中指出的,只需sp_word = word.strip().replace('\n', '').replace('e', '')
答案 1 :(得分:0)
lhay对strip()的行为的回答是正确的,但我不认为列表理解确实符合“简单”的要求。
我会改用replace():
>>> 'elemental'.replace('e', '')
'lmntal'
(另外请注意:for word in f:
与代码的前三行具有相同的作用。)