2012-10-02 132 views
-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() 

它不會取代在輸出文件中任何事情。幫幫我!

+0

你需要找到這個詞在該行出現,然後換行的一部分。 –

+0

你應該嘗試自己解決這個問題。這是一項家庭作業。如果你在這裏得到你的答案,你將不會學習如何自己做...加油!這是一個不錯的功課!當我在學校時,我希望我有這樣的作業...... – marianobianchi

+0

你似乎沒有使用'replace'函數... – nneonneo

回答

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

你可以只使用splitjoin實施replace

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