2015-02-10 69 views
1

我怎麼會模仿這種結果我會使用閉包嗎?

>>> countthesewords = wordcounter("~/mybook.txt") 
>>> countthesewords['coffee'] 
15 

我猜,你首先需要到DEF內做了閃避,

#filename is wordcountingprogram 

def wordcounter(filename): 
    txtfile = open(filename, 'r') 
    txtstr = txtfile.read() 
wordcounter = txtstr ????? 

我想我應該將文件轉換成一個圖書館,但我怎麼得到它,所以你可以這樣稱呼它?

我知道了,謝謝所有誰幫助!

回答

1

沒有,你可以做的是創建一個名爲classwordcounter(大寫Wordcounter會更PEP-8兼容)和重載__getitem__方法。下面是一個例子,你得到的想法:

class Wordcounter: 
    def __init__(self, filename): 
     f = open(filename, 'r') 
     self.s = f.read() 

    def __getitem__(self, item): 
     return self.s.count(item) 

w = Wordcounter('testfile.txt') 
print w['coffee'] 

結果:

15 

Python data model documentation的細節

+0

爲了使程序使用的名稱wordcounter作爲變量導入文本文件 'wordcounter(「TextFile.txt的」)' 和作爲字典 'wordcounter [「單詞」]' 你的例子將如何工作? 導致 '>>> countthesewords = wordcountingprogram.wordcounter( 「〜/ mybook.txt」) >>> countthesewords [ '咖啡'] 15' – Archie 2015-02-11 00:01:33

+0

哦,我明白了! 所以__init__,它基本上只是wordcounter() 和__getitem__爲x()當x = wordcounter()吧? 現在,我只需要找出一種方法,使其搜索整個單詞,而不僅僅是它出現多少次。 – Archie 2015-02-11 00:18:10

+0

'__init__'是您創建實例的地方,'__getitem__'是您解析*的地方。方括號內的內容。 – Selcuk 2015-02-11 00:19:12

0

除了@塞爾丘克的建議,使用LEN(字符串)來計算:

import re 

def wordcounter(filename, word): 
    txtfile = open(filename, 'r') 
    text = txtfile.read() 
    repetition = re.findall(word, text) 
    print len(repetition) 

wordcounter('file.txt', 'coffee') 
4

不,你不需要函數中的函數。嘗試使用集合模塊中的Counter類。

from collections import Counter 

def wordcounter(filename): 
    with open(filename) as txtfile: # Make sure file is taken care of 
     word_count = Counter(txtfile.read().split()) 

    return word_count 
+0

我認爲這會計算文件中的所有單詞;而不是給定單詞的重複次數。 – Selcuk 2015-02-11 00:01:02

+0

@Selcuk不,它計算在迭代每一個獨特的元素出現的次數,並用字典界面 – horns 2015-02-11 00:13:09

+0

是將它們暴露,但問題是計算一個文本文件中coffee'單詞'的出現次數的數量。 – Selcuk 2015-02-11 00:14:04