2011-02-14 54 views
0

函數應該從文件中返回剩餘的單詞,而不是第n個單詞。 我已經開放,閱讀和關閉文本文件,但我一直在努力弄清楚其餘的。我嘗試使用append,但很快意識到這不是它的方式。從文件中刪除每個第n個字

我至今未能編碼:

def message(fname, n): 

    infile = open(fname,'r') 
    mess = infile.read() 
    infile.close() 
    mess.append('') 
    return mess 

所以應該從文件返回的話剩下的,只是沒有第n個字。

+1

你指的是什麼索引? – 2011-02-14 01:29:06

+0

也許我可能會寫錯,但函數應該從文本文件中刪除每個第n個單詞並返回餘下的單詞。 – 97834657647563 2011-02-14 01:30:44

回答

2

可以將整個文件讀入列表並使用del語句刪除每個第n項。

def remove_every_nth_word_from_file(filename, n): 
    with open(filename) as f: 
     words = f.read().split() 
     del words[n - 1::n] 
    return words 

f.read()函數以字符串形式讀取整個文件; split()函數用空格分隔這個字符串;單詞[n-1 :: n]是一個列表片段,表示從第(n-1)個位置開始,包含每個第n個項目; del語句從列表中刪除此切片。

4

要刪除每n個,僞代碼是讀取的每一個字,並將它們全部寫出除的那些,其中wordnumber modulo n等於0

換句話說:

nth = 7 
wordnumber = 0 
while not end-of-file: 
    read word 
    wordnumber = wordnumber + 1 
    if wordnumber % nth is not 0: 
     write word 

就是這樣。但不要認爲這是Python的錯誤。我的僞代碼看起來非常像Python,因爲該語言非常適合使用,但您不能將其插入Python解釋器,並希望它能夠按原樣運行。

當然,將它適用於Python或任何其他正常語言(就語言而言通常不會太困難),而不是那些聲明性較好的語言)。

+0

那麼我將不得不使用拆分功能? – 97834657647563 2011-02-14 02:03:19

+0

我會這麼認爲,但是,從記憶中,Pythons字符串split使用了一個固定的分隔符(例如,如果所有的單詞都被一個空格分隔,那麼這個分隔符就可以)。如果你想讓你的代碼更通用,`re`模塊有自己的可以使用正則表達式的分割。你將遇到的另一個問題是,你需要'處理單詞'或'處理流水線並記住你要做的單詞數量'(即將這個單詞轉到下一行)。 – paxdiablo 2011-02-14 02:14:08

0

def all_but_n(file,num): 
    rf=[] #rf is the list containing words for the returned file 
    n=num 
    f=open(file,'r') 
    i=0#for indexing the file 
    for line in f: 
    line=line.strip('\n').split(' ') 
    for word in line: 
     if n!=i+1: 
     rf.append(word) 
     else: 
     n=n+num 
     i=i+1 
    return rf 

all_but_n('',3) 

你當然可以使用列表解析來提高速度。我以這種方式編寫了all_but_n(),以便您能夠理解發生了什麼

相關問題