作业:让X和Y为两个单词。查找/替换是一种常见的文字处理操作,它可以查找单词X的每次出现,并将其替换为给定文档中的单词Y.
您的任务是编写执行查找/替换操作的程序。您的程序将提示用户输入要替换的单词(X),然后是替换单词(Y)。假设输入文档名为input.txt。您必须将此查找/替换操作的结果写入名为output.txt的文件。最后,你不能使用Python内置的replace()字符串函数(它会使赋值变得非常容易)。
要测试代码,您应该使用文本编辑器(如记事本或IDLE)修改input.txt以包含不同的文本行。同样,代码的输出必须与样本输出完全相同。
这是我的代码:
input_data = open('input.txt','r') #this opens the file to read it.
output_data = open('output.txt','w') #this opens a file to write to.
userStr= (raw_input('Enter the word to be replaced:')) #this prompts the user for a word
userReplace =(raw_input('What should I replace all occurences of ' + userStr + ' with?')) #this prompts the user for the replacement word
for line in input_data:
words = line.split()
if userStr in words:
output_data.write(line + userReplace)
else:
output_data.write(line)
print 'All occurences of '+userStr+' in input.txt have been replaced by '+userReplace+' in output.txt' #this tells the user that we have replaced the words they gave us
input_data.close() #this closes the documents we opened before
output_data.close()
它不会替换输出文件中的任何内容。救命啊!
答案 0 :(得分:2)
问题是,如果找到匹配项,您的代码会将替换字符串粘贴到行尾:
if userStr in words:
output_data.write(line + userReplace) # <-- Right here
else:
output_data.write(line)
由于您无法使用.replace()
,因此您必须解决此问题。我会在你的行中找到这个单词的位置,将该部分剪掉,然后将userReplace
粘贴到其位置。
要做到这一点,尝试这样的事情:
for line in input_data:
while userStr in line:
index = line.index(userStr) # The place where `userStr` occurs in `line`.
# You need to cut `line` into two parts: the part before `index` and
# the part after `index`. Remember to consider in the length of `userStr`.
line = part_before_index + userReplace + part_after_index
output_data.write(line + '\n') # You still need to add a newline
使用replace
处理re.sub()
稍微烦人的方法就是使用{{1}}。
答案 1 :(得分:1)
您可以使用split
和join
来实施replace
output_data.write(userReplace.join(line.split(userStr)))