2012-11-09 116 views
-1

我需要用不同的單詞替換長度爲4的文本文檔中的所有單詞。Python 3.2將文本文檔中的所有單詞替換爲特定長度?

例如,如果一個文本文件含有「我喜歡吃很燙的湯」的話「喜歡」,「非常」和「湯」將與「東西」

更換之後,而不是覆蓋原來的文本文檔,它需要創建一個新的與改變的短語。

這是我到目前爲止有:

def replacement(): 
    o = open("file.txt","a") #file.txt will be the file containing the changed phrase 
    for line in open("y.txt"): #y.txt is the original file 
     line = line.replace("????","something") #see below 
     o.write(line + "\n") 
    o.close() 

我試圖改變 「????」爲類似

(str(len(line) == 4) 

,但沒有奏效

回答

0

首先讓做,如果它給長度爲4的字和詞它被賦予否則返回something功能:

def maybe_replace(word, length=4): 
    if len(word) == length: 
    return 'something' 
    else: 
    return word 

現在讓我們通過您的循環行走。在每次迭代中,您都有一行原始文件。讓我們把它分解成單詞。蟒蛇給我們的split功能,我們可以使用:

split_line = line.split() 

默認爲分割上的空白,這正是我們想要的東西。如果你想要的話,有more documentation

現在,我們想呼籲每一個字我們maybe_replace功能列表:

new_split_line = [maybe_replace(word) for word in split_line] 

現在,我們可以將這些備份一起使用join method

new_line = ' '.join(new_split_line) 

它寫回到我們的文件:

o.write(new_line + '\n') 

所以我們最後的功能n將被:

def replacement(): 
    o = open("file.txt","a") #file.txt will be the file containing the changed phrase 
    for line in open("y.txt"): #y.txt is the original file 
    split_line = line.split() 
    new_split_line = [maybe_replace(word) for word in split_line] 
    new_line = ' '.join(new_split_line) 
    o.write(new_line + '\n') 
    o.close() 
+0

這不會保留單詞之間的額外空格。雖然這在許多情況下都是可以的,但並非如此。 – Matt

+0

完美的解決方案!出色的解釋和卓越的工作。謝啦 – user1707398

0

這似乎是功課,所以這裏有一些關鍵概念。

當您閱讀文件時,您得到linesstrings。您可以使用名爲.split()的字符串方法將line拆分爲list,就像這樣。 words = line.split()。這將創建一個單詞列表。現在

,一個list迭代,這意味着你可以在同一時間在它使用一個for循環,並在list的一個項目再做一次手術。你想檢查word多長時間,所以你必須用你的循環遍歷words,並用它做一些事情。你有點關注如何使用len(word)來檢查單詞的長度。

您還需要一個地方來存儲您的最終信息。在循環之外,您需要爲結果創建一個list,並且在您繼續時檢查您已檢查的字詞。

最後,您需要爲文件中的每個line執行此操作,即循環遍歷該文件的第二個循環。

0
with open('file.txt', 'a') as write_file: 
    with open('y.txt') as read_file: 
     for line in read_file.readlines(): 
      # Replace the needed words 
      line = line.replace('????', 'something') 
      write_file.write(line) 
1

這將保留額外的空間,你有,如使用str.split()沒有其他的解決方案。

import re 

exp = re.compile(r'\b(\w{4})\b') 
replaceWord = 'stuff' 
with open('infile.txt','r') as inF, open('outfile.txt','w') as outF: 
    for line in inF: 
     outF.write(exp.sub(replaceWord,line)) 

這使用正則表達式來替換文本。這裏使用的正則表達式有三個主要部分。

\b 

第二部分恰好四個字母(所有字母數字字符和_)匹配:第一個單詞的開頭匹配

(\w{4}) 

最後一部分是像第一,它的結束相匹配一個字

\b 
相關問題