2014-04-01 71 views
2

該程序用於檢查兩個特定單詞(如:'ஒன்று'和'கோடி')是否連續出現,如果是這樣,請用特定單詞替換第一個單詞(例如:'ஒரு 「)。我必須從文件中讀取內容並將它們寫入另一個文件中。我已經使用了一個標誌變量,從2開始初始化,並且只在標誌%2 == 0時纔打印到文件中,以便文字不會重複到新文件中。 pgm只在單詞處於均勻位置時才起作用,否則不起作用。我應該如何更改檢查和打印。下面是代碼:如何替換文件中的某些單詞

filename = raw_input("enter file:") 
ff = open(filename+'.rep_out','w') 
with open(filename, 'r') as f: 
    for line in f: 
     words = line.strip().split() 
     flag = 2 
     for word1, word2 in zip(words, words[1:]): 
      if flag%2 == 0: 
       if word1 == 'ஒன்று' or word1 == '1': 
        if word2 == 'கோடி' or word2 == 'லட்சம்' or word2 == 'ஆயிரம்' : 
         #word1=word1.replace(word1,'ஒரு') 
         word1='ஒரு' 
         #ff.write(word1+" ") 
       ff.write(word1+" ") 
       ff.write(word2+" ")    
      flag=flag+1 
f.close() 
ff.close() 
+0

'ஒருஆயிரம்'將不正確? 'ஓராயிரம்'? – thefourtheye

+0

@thefourtheye:我想要替換一些如何,至少意義將保持不變。你能幫忙嗎? – charvi

回答

1

當你的字符串操作得到這個複雜的,有一個很好的機會,你可以用一個更強大的工具比Python的字符串方法做的更好。在這種情況下,這是一個相當容易一點使用正則表達式:

import re 

with open(filename) as f: 
    with open(filename + '.rep_out') as ff: 
     for line in f: 
      ff.write(re.sub("ஒன்று (கோடி|லட்சம்|ஆயிரம்)", r"ஒரு \1", line)) 

解釋:

"ஒன்று (கோடி|லட்சம்|ஆயிரம்)"匹配ஒன்று出現的任何連續後跟任意கோடி的,லட்சம்或ஆயிரம்的正則表達式 - 可以延長儘可能多的候選第二個單詞,你需要。

re.sub替換用替換第一個字(ஒரு),其次是相同秒字,它發現之前 - 在\ 1告訴它「把匹配第一組(位)早在這裏」 (\ 1是爲什麼它需要是一個原始字符串 - 你想要通過re.sub解析,而不是Python的字符串文字規則)。

作爲寫入,上述代碼假定每行字由恰好一個空間,這是從原始的代碼,允許他們由空格的任何量來分離不同的分離,但將輸出它們通過分離單一空間。爲了配合這種行爲,你可以修改正則表達式上面,像這樣:

re.sub("ஒன்று\s+(கோடி|லட்சம்|ஆயிரம்)", r"ஒரு \1", line) 

的\ S匹配任何空白字符,而+指在一排「的那場比賽的倍數,只要有至少一個」。

請注意,當您使用with open(...) as f:時,您無需事後致電f.close()--這會在您退出with塊時自動發生。

+0

只有上面的線足夠了?或者我應該把更多的東西?因爲我試過了,我沒有工作。 – charvi

+0

@charvi你需要用你的實際單詞1(即'ஒன்று')替換'word1',並且與所有單詞2相似 - 它不會做任何類型的變量替換。我已經更新了我的答案,以使其更清楚。除此之外,它應該工作。你會得到什麼輸出? – lvc

+0

我曾試過,它並沒有取代。我再次嘗試,它不會取代它。 – charvi

相關問題