5

直接来说,到目前为止我的代码是这样的:

from glob import glob
pattern = "D:\\report\\shakeall\\*.txt"
filelist = glob(pattern)
def countwords(fp):
    with open(fp) as fh:
        return len(fh.read().split())
print "There are" ,sum(map(countwords, filelist)), "words in the files. " "From directory",pattern

我想添加一个代码来计算模式中的唯一单词(此路径中的 42 个 txt 文件),但我不知道如何。有谁能够帮助我?

4

3 回答 3

8

在 Python 中计算对象的最佳方法是使用collections.Counter为此目的而创建的类。它的作用类似于 Python dict,但在计数时使用起来更容易一些。您可以只传递一个对象列表,它会自动为您计算它们。

>>> from collections import Counter
>>> c = Counter(['hello', 'hello', 1])
>>> print c
Counter({'hello': 2, 1: 1})

Counter 还有一些有用的方法,例如 most_common,请访问文档了解更多信息。

Counter 类的一种也非常有用的方法是 update 方法。通过传递对象列表实例化 Counter 后,您可以使用 update 方法执行相同操作,它将继续计数而不会删除对象的旧计数器:

>>> from collections import Counter
>>> c = Counter(['hello', 'hello', 1])
>>> print c
Counter({'hello': 2, 1: 1})
>>> c.update(['hello'])
>>> print c
Counter({'hello': 3, 1: 1})
于 2012-08-10T10:43:09.523 回答
2
print len(set(w.lower() for w in open('filename.dat').read().split()))

将整个文件读入内存,使用空格将其拆分为单词,将每个单词转换为小写,从小写单词创建一个(唯一的)集合,对它们进行计数并打印输出

于 2012-08-10T10:43:17.073 回答
0

如果要计算每个唯一单词的数量,请使用 dicts:

words = ['Hello', 'world', 'world']
count = {}
for word in words :
   if word in count :
      count[word] += 1
   else:
      count[word] = 1

你会得到 dict

{'Hello': 1, 'world': 2}
于 2012-08-10T10:36:32.527 回答