-1

作业:设 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()

它不会替换输出文件中的任何内容。帮助!

4

2 回答 2

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().

于 2012-10-02T03:39:50.833 回答
1

您可以只使用splitjoin实现replace

output_data.write(userReplace.join(line.split(userStr)))
于 2012-10-02T03:56:45.240 回答