无需更换功能即可更换

时间:2012-10-02 03:22:16

标签: python

  

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

它不会替换输出文件中的任何内容。救命啊!

2 个答案:

答案 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)

您可以使用splitjoin来实施replace

output_data.write(userReplace.join(line.split(userStr)))