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 ...
随机推荐
- SpringBoot编写自定义配置信息
⒈编写自定义配置类 1.浏览器配置 package cn.coreqi.security.properties; public class BrowserProperties { private St ...
- Elasticsearch 5.4.3实战--Java API调用:批量写入数据
这个其实比较简单,直接上代码. 注意部分逻辑可以换成你自己的逻辑 package com.cs99lzzs.elasticsearch.service.imp; import java.sql.Tim ...
- *445. Add Two Numbers II
1. 原始题目 You are given two non-empty linked lists representing two non-negative integers. The most si ...
- shell-自动按省市建立文件夹,并在每个城市下创建当前日期文件夹
Code: #!/bin/bash date=`date +%Y%m%d` ProName="广东市" CityName="广州市 汕尾市 阳江市 揭阳市 茂名市 江门市 ...
- c++不定参数函数
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...
- 【转】Linux查看系统是32位还是64位方法总结
这篇博客是总结.归纳查看Linux系统是32位还是64位的一些方法,很多内容来自网上网友的博客.本篇只是整理.梳理这方面的知识,方便自己忘记的时候随时查看. 方法1:getconf LONG_BIT ...
- struts2框架之重复提交问题
防止重复提交 1. 什么是重复提交 * 提交表单时,点击一次后,页面没有刷新时,马上又点击一次,就是重复提交 * 提交后,通过浏览器的回退,又回到了表单页面,再次提交 * 提交后,按F5刷新,也是重复 ...
- [转]PHP开发中涉及到emoji表情的三种处理方法
最近几个月做微信开发比较多,存储微信昵称必不可少,可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ...
- oracle 报表带小计合计
selectcase when (grouping(glbm)=1) then '合计' else DECODE(glbm,null,'',glbm) end glbm,case when (grou ...
- Python-HTML转义字符
ISO Latin-1字符集: — 制表符Horizontal tab — 换行Line feed — 回车Carriage Return — Space ! ! — 惊叹号Exclamati ...