1.3.1 编程要点
1)用split()函数实现多个分隔符分别分隔字符串
导入模块
import re
#生成一个字符串
vstring1='yuyy:好好学习,天天向上!yes'
#调用re模块的split()函数,返回值是一个list类型的变量
vret1=re.split('[:,!]',vstring1)
#打印['yuyy', '好好学习', '天天向上', 'yes']
print(vret1)
#打印vret1长度:4
print(len(vret1))
2)用sort()和sorted()函数对字典型数据进行排序
sort()函数直接根据原对象进行排序,也就是改变了原对象的排列形式;
sorted()函数是重新生成一个排好序的对象,不会改变原对象,这里只举例sorted()函数,代码如下所示
#给一个字典变量赋值
dic={'a':100,'b':90,'c':200,'d':10,'e':88}
#调用排序函数sorted(),返回值vret是一个列表变量
vret=sorted(dic.items(),key=lambda item:item[1])
#打印出:[('d',10),('e',88),('b',100),('a',100),('c',200)]
print(vret)
sorted函数中的第一个参数是参与排序的字典的所有项,第二个参数是key
items():返回包含(键值,实值)元组的列表
key通过匿名函数:lambda函数的返回值指定参与排序的数据项
item表示字典中的元素项,每个元素是由key和value组成,item[1]表示value,item[0]表示key,代码中用item[1]将键值返回给key,表示以键值大小作为排序依据对字典中各项进行排序
1.3.2 代码实现:对文本进行分词
将文本文件中的英文单词找出来(进行分词),并统计每个单词出现的次数,代码如下:
#导入正则表达式相关模块
import re
#定义一个函数,通过该函数查找文本字符串中的每一个单词
#计算每一个单词出现的次数,最后按照出现次数从多到少放到列表变量中
def get_char(txt):
#通过re.split()函数将英文单词分别取出来,函数的第一个参数是分隔符,
#第一个参数指定以":" ";" "," "." """和空格(\s)以及多个空格(\s*)作为分隔符,
#第二个参数是要拆分的字符串
#通过以下代码把字符串分成一个个单词(以分隔符划分),
#将分割出来的单词放到列表变量vlist中
vlist=re.split('[:;,"\s,\s*]',txt)
#生成字典变量
vdic_frequency=dict()
#遍历列表变量vlist
for vchar in vlist:
#取出每个单词,并判断字典中是否存在一个元素项(键值对),
#该项键名是以该单词命名
if vchar in vdic_frequency:
#如果存在,将以单词命名的键的值加1
vdic_frequency[vchar] +=1
else:
#不存在,增加一个以单词命名的键,并设置其键值为1
vdic_frequency[vchar]=1
#对字典中的项按键值进行排序,并且是倒序排列(reverse=True)
vdic_sort=sorted(vdic_frequency.items(),key=lambda item:item[1],reverse=True)
return vdic_sort
#主函数为main
if __name__=='__main__'
#打开文件,读出文件的文本
#其中test.txt文件是当前目录下的一篇英文文章,文本类型
with open('test.text','r') as f:
vtext=f.read()
#调用排序
vstr=get_char(vtext)
print('列出文本中的英文单词:\n')
#在终端上打印文本中的单词
print(vstr)
1)get_char()函数的主要流程是:用re模块的split()函数对字符串进行分割,split()函数的第一个参数是一个正则表达式,能识别多个分隔符,以实现正确分离英文单词的目的。split()函数返回一个列表变量,这个列表变量中的每一项是一个单词,接着把单词从列表中取出来加入字典中,这个字典的键名用单词命名,键值(value)将用这个单词在字符串中出现的次数进行赋值,实现的方式是通过循环遍历列表统计出每个单词出现的次数,然后用统计出的数据修改字典;最后按字典的键值大小进行排序,排序的方式是倒序,排序结果是一个列表,列表的每一项是元组,元组由单词和该单词出现的次数两个值组成。
2)主函数的流程是从一个文本文件中读入一个英文长字符串,然后调用get_char()函数取得一个列表变量,再将这个列表变量的内容打印到终端,这样就看到了文本文件中的所有英文单词