2013-02-04 64 views
0

我想要做的是從文件中讀取,然後對每個單詞,將其附加到字典以及其出現次數。我如何從一個文件中讀取每個單詞並將其附加到字典中?

示例:

'今天是星期日。明天不是星期天。「

我的字典裏就那麼是這樣的: { '今天':1, '是':2, '週日':2, '明天':1, '不':1}

的路上我我們要做的就是使用readline和split來創建一個列表,然後將每個元素和它的值附加到一個空字典中,但目前爲止它並不是真的有效。這裏是我到目前爲止,雖然它不完全:

file = open('any_file,txt', 'r') 

for line in file.readline().split(): 
    for i in range(len(line)): 
     new_dict[i] = line.count(i) # I'm getting an error here as well, saying that 
return new_dict      # I can't convert int to str implicitly 

這個問題是看我的字典更新時,每一行的時候,一個詞的價值不會累積。所以如果在另一行'星期日'發生3次,我的字典將包含{'sunday':3}而不是{'sunday':5}。任何幫助?我不知道該從哪裏出發,我對這一切都很陌生。

+0

另一個問題是,如果「星期日」在一行上發生3次,你正在做'line.count(「星期日」)'3次這是浪費 –

回答

2

您正在尋找collections.Counter

如:

from itertools import chain 

with open("file.txt") as file: 
    Counter(chain.from_iterable(line.split() for line in file)) 

(使用itertools.chain.from_iterable()generator expression了。)

請注意,您的例子僅適用於第一線,我想這是不是故意的,而這個解決方案是跨整個文件(顯然這是微不足道的交換)。

0

你使用Python 3還是Python 2.7?

如果是的話,計數器使用來自集合庫:

import re 
from collections import Counter 
words = re.findall('\w+', open('any_file.txt').read().lower()) 
Counter(words).most_common(10) 

但你得到的元組的名單,雖然。你應該很容易將元組列表轉換爲字典。

+0

這個正則表達式不是真的需要,'collections'存在於2.x. –

+0

@Lattyware,對不起,我應該讓自己更清楚。該計數器不可用在python 2. – vajrasky

+0

我剛剛測試過,它絕對至少有2.7。 –

1

下面是一個簡單的版本,不帶標點處理

from collections import Counter 
counter = Counter() 
with open('any_file,txt', 'r') as file: 
    for line in file: 
     for word in line.split(): 
      counter[word] += 1 

也可以寫成這樣:

from collections import Counter 
counter = Counter(word for line in file for word in line.split()) 

下面是一個使用dict

來解決這個問題的一種方法
counter = {} 
with open('any_file,txt', 'r') as file: 
    for line in file: 
     for word in line.split(): 
      if word not in counter: 
       counter[word] = 1 
      else: 
       counter[word] += 1 
+0

這種蔑視使用'collections.Counter()'的觀點。 (編輯:編輯它會更好一些,雖然這是一種扁平化迭代的低效方法)。 –

+0

是收集櫃檯唯一的方法來做到這一點?我假設任何其他解決方案只會是漫長而乏味的,儘管 – peppy

+0

@peppy當然,這不是唯一的解決方案,但它的效率和工作都是爲您完成的。 –

0

試試這個

file = open('any_file.txt', 'r') 
myDict = {} 
for line in file: 
    lineSplit = line.split(" ") 
    for x in xrange(len(lineSplit)): 
     if lineSplit[x] in myDict.keys(): myDict[lineSplit[x]] += 1 
     else: myDict[lineSplit[x]] = 1 

file.close() 

print myDict 
相關問題