python字母计数-使用Python对文档单词进行计数

做hacker.org上面的题目时,遇到了一个题目需要对RFC3280种长度为9的单词进行计数,并找出这些单词中出现次数最多的那个:Didactic Byte

RFC3280文档有7000多行,靠人工是数不出来的,解决这种是就得编程了,而且很明显,在处理此类问题时脚本式比较方便的,果断选择python

先是将题意理解错了,理解为出现次数最多的九个字母, 然后等到程序运行好提交答案时才发现不对,唉,真是汗颜

既然程序写出来了,还是将其贴出来吧

文档中字母频率计数:

# find the occurence of single letter from a document

#import fileinput

test = ""

dicts = {}

# read content from a document

# we could use readline,readlines etc.

# also we could use fileinput.input(filename)

text = open("RFC3280.txt")

for line in text.readlines():

test += line.lower().replace(" ","")

# use dictionary to store the occurence and it"s letter

for i in xrange(97,123):

letter = chr(i)

count = test.count(chr(i))

#print "the accounts of %c is %d " % (letter,count)

dicts.setdefault(letter,count)

# sort the dict by values,here I used a lambda expression

# to sort by keys:

# sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[0])

sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)

print sorted_dict

代码挺短的,注释也很详细,可以看出来脚本语言在处理这种事情上确实是比较方便

下面再看看,从文档中获取指定长度的单词的出现频率,并对其进行排序

# this script is used to find all 9-letter word from specific document

# after find them, pick the most commom one from them

# as I used dictionary to store them, I can not output the one I want seperately

# the dictionary object is difference from list or an array,it store it"s key:value rondomly

test = ""

storage = []

dicts = {}

word_length = 9

# read content from a document

# as python script read lines from the document,it may contains " "

# at the end of a sentence,there followed a ".",we also need a handle with tring.replace function

text = open("RFC3280.txt")

for line in text.readlines():

test += line.lower().replace(" ","").replace(".","")

# convert a string to a list

lists = test.split(" ")

# choose theses words which it"s length is word_length,here is 9

for i in xrange(0,len(lists)):

if len(lists[i])==word_length:

storage.append(lists[i])

#print storage

#print len(storage)

# now use dictionary.setdefault to add elements to dictionary

for n in xrange(0,len(storage)):

word = storage[n]

count = storage.count(word)

dicts.setdefault(word,count)

# sort the dictionary order by vaules

sorted_dict = sorted(dicts.iteritems(),key = lambda d:d[1],reverse = True)

print sorted_dict

两段代码,实现的思路上差不多,都是从文件读取内容存入一个字符串中,这里是按行读取,所以要对字符串拼接。存入字符串后还需要进行一下处理,因为原文文本中有大量

的空格、换行符,其次句末的"."也会被当作单词的一部分,还好这里要处理的符号不多,不然恐怕就要劳驾正则表达式了。然后将其转换为list(列表)对象,list有count属性可

直接对元素计数。由于需要知道每个元素出现的次数,我是用dictionary(字典)对象存储“键=>值”对,这里使用setdefault属性进行元素添加。注意到代码中使用了lambda

表达式,如果对lambda表达式不太熟悉建议还是查阅一下资料,遗憾的是一段时间没用python,我对这些知识点也没太大映像了,手头也没用相应资料(manual很好,有时候想查到某个比较细小的东西时会不太方便, 如果有安装bpython可能会方便很多),可参考:

上面两段代码可以得出想要的结果,但在阅读体验上一大堆字典元素打印在一起还是需要改进的,今后会对其进行整理。

最后在贴上部分测试文件的内容,这里直接读取文件是因为python脚本和该文本文件处于同一目录下

This memo profiles the X.509 v3 certificate and X.509 v2 Certificate

Revocation List (CRL) for use in the Internet. An overview of this

approach and model are provided as an introduction. The X.509 v3

certificate format is described in detail, with additional

information regarding the format and semantics of Internet name

forms. Standard certificate extensions are described and two

Internet-specific extensions are defined. A set of required

certificate extensions is specified. The X.509 v2 CRL format is

described in detail, and required extensions are defined. An

algorithm for X.509 certification path validation is described. An

ASN.1 module and examples are provided in the appendices.

python统计文档中词频

python统计文档中词频的小程序 python版本2.7 效果如下: 程序如下,测试文件与完整程序在我的github中 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 def ...

如何在命令行模式下查看Python帮助文档---dir、help、__doc__

如何在命令行模式下查看Python帮助文档---dir.help.__doc__ 1.dir函数式可以查看对象的属性,使用方法很简单,举str类型为例,在Python命令窗口输入 dir(str) 即 ...

Python帮助文档中Iteration iterator iterable 的理解

iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...

sphinx:python项目文档自动生成

Sphinx: 发音: DJ音标发音: [sfiŋks] KK音标发音: [sfɪŋks] 单词本身释义: an ancient imaginary creature with a lion"s bo ...

三言两语聊Python模块–文档测试模块doctest

doctest是属于测试模块里的一种,对注释文档里的示例进行检测. 给出一个例子: splitter.pydef split(line, types=None, delimiter=None): &q ...

python 本地文档查看

本地安装Python文档本地查看,在命令行中运行: python -m pydoc -p 1234 在浏览器中访问如下链接,就可以访问到本地文档: http://localhost:1234/ 本地文 ...

使用Sphinx生成本地的Python帮助文档

第一步:安装Sphinx 首先我们需要安装Sphinx,如果已经安装了Anaconda,那么只需要使用如下命令即可安装,关于其中的参数 -c anaconda,可以在链接[1]中查看: conda i ...

Python asyncio文档阅读摘要

文档地址:https://docs.python.org/3/library/asyncio.html 文档第一句话说得很明白,asyncio是单线程并发,这种event loop架构是很多新型异步并 ...

使用sphinx快速生成Python API 文档

一  简单介绍 不管是开源还是闭源,文档都是很重要的.当然理论上说,最好的文档就是代码本身,但是要让所有人都能读懂你的代码这太难了.所以我们要写文档.大部分情况,我们不希望维护一份代码再加上一份文档, ...

随机推荐

JSP分页显示实例(基于Bootstrap)

首先介绍一款简单利落的分页显示利器:bootstrap-paginator 效果截图: GitHub官方下载地址:https://github.com/lyonlai/bootstrap-pagina ...

借助取色工具ColorPix对Pycharm编辑器设定自己喜欢的代码颜色_20161202

1.Pycharm编辑器怎么设定自己喜欢的颜色,前几天看爬虫博客,看博主贴出的代码颜色很是喜欢,如下图,设置了好多次找不到他设定的颜色. 2.下班回家想起来之前做表的时候用到过一个取色工具ColorP ...

Windos中无法删除桌面IE图标的解决方法

解决方法其实并不难,打开注册表,转到如下图的位置,详细地址在图片最下面: 需要注意的是,你需要在NameSpace中逐个查看各个项目的数据值,显示为数据值为Internet Explorer的项目即为 ...

Form认证导致登陆页面的样式无效和图片不能显示的原因

最近在做企业内门户网站,一切进展还算顺利,部署到生产环境的时候也能没有什么大问题,只是登录页面的样式不起作用,不知为何,因为是使用了login控件,最初以为是此控件有内置默认样式或者什么原因,于是就不 ...

驱动09.nand flash

1 nand flash的操作 目的:读地址A的数据,把数据B写到地址A. 问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?答1.在DATA0-DATA7上既传输数据 ...

Java中正则表达式的几种用法

多数内容转载自:http://www.jb51.net/tools/regex.htm ,有改动 用到了java.util.regex包: 1. 验证 Pattern pattern = Patter ...

swap分区的扩展

Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况.swap分区在非高内存的服务器上必不可少,但是s ...

理解JS深拷贝

前言: JS的拷贝(copy),之所以分为深浅两种形式,是因为JS变量的类型存在premitive(字面量)与reference(引用)两种区别.当然,大多数编程语言都存在这种特性. 众所周知,内存包 ...

codechef EBAIT Election Bait【欧几里得算法】

题目分析: 欧几里得算法来处理一类分数问题,分数问题的形式如下 $rac{a}{b} < rac{p}{q} < rac{c}{d}$ 当a=0时,答案等于$rac{1}{ ...

linux chkconfig添加开机启动服务

--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据: --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值