2017-02-18 96 views
0

我有一個文本文件包含一個關於故事的文本,我想找到一個單詞「like」並獲取它後面的下一個單詞,並調用一個函數來查找該單詞的同義詞。這裏是我的代碼:無法正確保存文件

file = 'File1.txt' 
with open(file, 'r') as open_file: 
    read_file = open_file.readlines() 
    output_lines = []   

for line in read_file: 
    words = line.split() 
    for u, word in enumerate(words): 
     if 'like' == word: 
      next_word = words[u + 1] 
      find_synonymous(next_word) 

    output_lines.append(' '.join(words)) 
    with open(file, 'w') as open_file: 
     open_file.write(' '.join(words)) 

我的,我認爲在文本中唯一的問題,因爲當我寫一個句子包括單詞(像)它的工作原理(for example 'I like movies')。但是當我有一個文件包含很多句子並運行代碼時,它會刪除所有文本。誰能知道哪裏可能是問題

回答

0

你有幾個問題。 find_synonymous(next_word)不會替換列表中的單詞,所以充其量只會返回原始文本。您在for循環內執行open(file, 'w'),因此每行都會覆蓋該文件。如果like碰巧是線上的最後一個字,並且您不處理在下一行繼續所喜歡的事情的情況,則next_word = words[u + 1]將引發索引錯誤。

在這個例子中,我追蹤「is_liked」狀態。如果一個單詞處於相同的狀態,它將被轉換。這樣,您可以處理跨行分割的句子,而不必擔心索引錯誤。該列表被寫入循環外部的文件。

file = 'File1.txt' 
with open(file, 'r') as open_file: 
    read_file = open_file.readlines() 

output_lines = []   
is_liked = False 

for line in read_file: 
    words = line.split() 
    for u, word in enumerate(words): 
     if is_liked: 
      words[u] = find_synonymous(word) 
      is_liked = False 
     else: 
      is_liked = 'like' == word 
    output_lines.append(' '.join(words) + '\n') 

with open(file, 'w') as open_file: 
    open_file.writelines(output_lines)