果然!还是没法绕开正则表达式啊!!!!!!这下接着学习了!!!!!
题目 :任一个英文的纯文本文件,统计其中的单词出现的个数。
代码是我从别的博客上借鉴的,了解到需要用到的知识点有: 文件读写、splitlines()的用法、 re.sub()的用法、原生字符串r''的用法、重新复习字典的用法等等
下边一个个的分析:
1.文件读写:
import sys
# file=open('G:\python文件\poem.txt','r')
# print(file.read())
#下边是另外一种写法
#read(size)方法,每次最多读取size个字节的内容
#调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list
# with open('G:\python文件\poem.txt')as f:
# print(f.read(10))
# file=open('G:\python文件\poem.txt','r')
# for line in file.readlines():
# print(line)
#前边说的是二进制字符 如果是文字呢? 后边加‘rb’
# file=open('G:\python文件\image.png','rb')
# print(file.read())
#写文件也是一样 就是把'r'换成'w'
2.splitlines()方法
返回一个列表,将每一行都写在列表的一个元素里,可以设置‘\n’是否可见
import sys
with open("G:\python文件\poem.txt") as f:
print(f.read().splitlines())
Programming is fun.
When the "work" is done-
load
if you wanna make your work also fun:
use Python python python!
结果:
['Programming is fun.', 'When the "work" is done-', 'load ', 'if you wanna make your work also fun:', ' use Python python python!', '']
3. re.sub()的用法 是用来替换字符串:
比如说s1=' abc123cde456 ' 想要将数字都改成222的话 就要用到这个 re.sub('\d+','222',s1) 其中,最重要的是第一个参数,也就是匹配正则表达式
这里有一个知识点是原生字符串 格式就是r' ' 引号里如果有转义字符串不想被转义的话 就不必在前边再加转义字符了#原生字符串r'' 与转义符 \
s1=r'abc\abc'
print(s1)
s2='abc\\abc'
print(s2)
s3='abc\'nabc'
print(s3)
s4='ab\\\\cd\\\\ef'print(s4)
关于正则表达式,要学习的东西还有很多很多,一定要抽时间把这些东西弄明白!真的很重要!!!4.字典的用法
dic.setdefault(word.lower(), 0) 这句话的意思是 如果dictionary里边没有某word.lower的键值对,就添加上 ,默认value是0 而dic[]就是设置value的值 dic[word.lower()]
import re
def get_word_frequencies(file_name):
dic = {}
txt = open(file_name, 'r').read().splitlines() #转化为列表
print(txt)
n=0
for line in txt: #line就是每一行的字符
line = re.sub(r'[.?()!,"/]', ' ', line) #要替换的标点符号,英文字符可能出现的
line = re.sub(r' - ', ' ', line) #替换单独的‘-’
for word in line.split():
if word[-1] =='-': #当一行的最后一个字符是-的时候,需要跟下一个英文字符串联起来构成单词
m=word[:-1]
n=1
break
if n==1:
word=m+word
n=0
print (word)
dic.setdefault(word.lower(), 0) #不区分大小写 如果键不存在于字典中,将会添加键并将值设为默认值。
dic[word.lower()] += 1 #dic[]是用来查value的
print(dic) #统计每个单词出现的次数
get_word_frequencies("G:\python文件\poem.txt")