python练习册0004题
在任意一个英文文档中,统计单词出现的次数,
分析:
本题不是很难,单词通常以空格隔开,但是有些单词后面跟一些特殊符号,只需把这些特殊符号替换掉就可以了,
代码一
import re file_name = 'code.txt' lines_count = 0
words_count = 0
chars_count = 0
words_dict = {}
lines_list = [] with open(file_name, 'r') as f:
for line in f:
lines_count = lines_count + 1
chars_count = chars_count + len(line)
match = re.findall(r'[^a-zA-Z0-9]+', line) #正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)语法:
for i in match:
# 只要英文单词,删掉其他字符
line = line.replace(i, ' ')
lines_list = line.split()
for i in lines_list:
if i not in words_dict:
words_dict[i] = 1
else:
words_dict[i] = words_dict[i] + 1 print('words_count is', len(words_dict))
print('lines_count is', lines_count)
print('chars_count is', chars_count) for k, v in words_dict.items():
print( k, v)
该代码有些啰嗦,网上找的,说下思路把,利用正则表达式找到所有的不是字母也不是数字的数据保存下来,然后再访问文本中的数据,将非字母和数字的数据替换为空
弱弱的说一句,直接替换掉不就完了。
代码二:
这是本人所写的,较代码一稍微简洁些;
import re
f=open("code.txt",'r')
s=f.read()
s.replace("[^a-zA-Z]",' ')
s=s.split()
word={}
for i in s:
if i not in word:
word[i]=1
else:
word[i]=word[i]+1
for k,v in word.items():
print(k,v)
代码三:
你以为你写的够简洁了吗?不,python早就帮你封装好函数了。
点开才能看。
import collections
import re def calwords(path):
word = []
with open(path) as file:
data = file.readlines()
for line in data:
word += re.split(' |,',line.strip('\n'))
print(collections.Counter(word)) if __name__ == '__main__':
calwords('e://code.txt')
用到的方法说明
正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)
语法:findall(pattern, string, flags=0) string的replace方法,用后一个参数替换字符串中的前一个参数。
string.split方法
str.split() 单一分隔符,使用str.split()即可 str.split不支持正则及多个切割符号,不感知空格的数量 re.split() 多个分隔符,复杂的分隔情况,使用re.split 原型: re.split(pattern, string, maxsplit=0) 通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。 eg: >>>a='w w w' >>>import re 1.空格分 >>>re.split(r'[\s]',a) ['w','w','w'] 2.只分割一次 >>>re.split(r'[\s]',a,1) ['w','ww'] 3.多个字符分割 >>>c='w!w@w%w^w' >>>re.split(r'[!@%^],c) ['w','w','w','w','w'] 4.还原?: >>>re.split(r'(?:!@%^),c) ['w!w@w%w^w']
描述
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
couter 是一个容器,可以统计列表中元素的出现次数.
python练习册0004题的更多相关文章
- python每日一练:0004题
第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数. import re count = 0 with open('./EnglishText.txt','r') as f: tem ...
- Python练习册--PIL处理图片之加水印
背景 最近在看到了Python 练习册,每天一个小程序 这个项目,非常有趣,也比较实用. 晚上看了这第000题,关于Python图片处理: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似 ...
- 关于理解python类的小题
今天看了python部落翻译的一篇<一道python类的小题>文章,感觉挺有启发性,记录下来: print('A') class Person(object): print('B') de ...
- python练习册0006
第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...
- python基础之逻辑题(3)
Python基础之逻辑题(3) 1.编写一个函数实现将IP地址转换成一个整数 2.求结果:---lambda 3.求a的结果 4.求下面nums的输出 5.求下面片段的输出 6.写出程序的结果:--- ...
- python基础之逻辑题(2)
python基础之逻辑题(2) 1.若k为整数,下列while循环执行的次数为? 2.请输出正确结果-----numbers? 3.求结果-----math? 4.求结果-----sum? 5.输 ...
- python基础之逻辑题(1)
python基础之逻辑题(1) 1.用一行代码实现数值交换? 2.求结果--fromkeys? 3.1,2,3,4,5能组成多少个互不相同且无重复的三位数? 4.有两个字符串列表a和b,每个字符串是逗 ...
- python练习册 每天一个小程序 第0004题
1 #-*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述:任一个英文的纯文本文件,统计其中的单词出现的个数. 5 参考学习链接: 6 re ht ...
- Python 练习册,每天一个小程序----第0000题
题目 第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 Code: from PIL import Image,Imag ...
随机推荐
- java知识点3
高级篇 新技术 Java 8 lambda表达式.Stream API. Java 9 Jigsaw.Jshell.Reactive Streams Java 10 局部变量类型推断.G1的并行Ful ...
- xadmin后台页面定制和添加服务器监控组件
xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...
- fabric.js PatternBrush
// Original canvas const canvas = new fabric.Canvas('canvas'); fabric.Image.fromURL('https://picsum. ...
- MongoVUE 使用教程
MongoVUE是一款针对MongoDB的客户端工具,现在连接数据库也叫数据模式有2种方法,一种是B/S结构的数据库,通过网页就可以访问.另外一种就是基于C/S客户端的连接方式,本次为大家分享的这一个 ...
- Ubuntu14下nginx服务器链接PHP
报错:nginx下无法打开php,报错[error] 5040#0: *1 connect() failed (111: Connection ref ... server { listen ; #l ...
- codeforces411div.2
每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeFo ...
- Ubuntu 关闭触摸板
1.关闭 sudo modporbe -r psmouse 2.开启 sudo modprobe psmouse
- redis递减,过期返回值
2017年4月24日 18:23:07 星期一 $key = 'abc'; $redis = IRedis::getInstance(); $a = $redis->setex($key, 1, ...
- 发布python模块
首先要写好模块和setup.py,把他们放在同一个文件夹下,图例是放在了stuManage文件夹下,setup.py具体内容如下: 然后打开终端,切到stuManage文件夹下开始发布 现在就可以跟p ...
- Gradle更小、更快构建APP的奇淫技巧
本文已获得原作者授权同意,翻译以及转载原文链接:Build your Android app Faster and Smaller than ever作者:Jirawatee译文链接:Gradle更小 ...