【学习笔记】Python二级考试05_txt文本处理&字典的应用

原题

问题1

《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络版本文件,文件名为“命运. txt”。

问题1 (5分) :
在PY301-1. py文件中修改代码,对“命运. txt”文件进行字符频次统计,输出频次最高的中文字符(不包含标点符号)及其频次,字符与频次之间采用英文冒号”:”分隔,示例格式如下:

理:224.

# 以下代码为提示框架
# 请在...处使用一行或多行代码替换
# 请在______处使用一行代码替换
#
# 注意:提示框架代码可以任意修改,以完成程序功能为准

...
d = {}
...
print("{}:{}".format(______))

答案1

思路1

以下为处理该文本的基本思路

①:打开txt格式的文件
②:读取文件中的文字部分
③:根据文字建立字典,其中key为文字,key对应的值为该文字出现的次数
注:使用字典的get()函数来统计其频数
④:只读取文字(不读取其中的标点符号)
⑤:输出出现频次最高的文字,文字与对应出现次数之间使用 : 进行连接

代码1

f = open('命运.txt','r')

txt = f.read()
d = {} #此部分为题目给出的提示
for i in txt:
	if i not in ",。:;【】《》?、“”‘’":
		d[i] = d.get(i,0) + 1 
d.sort(key = lambda x:x[1],reverse = True)
ls = list(d.items())
print("{}:{}".format(ls[0][0],ls[0][1]))

f.close()

问题2

问题2 (5分) :在PY301-2. py文件中修改代码,对“命运. txt”文件进行字符频次统计,按照频次由高到低,屏幕输出前10个频次最高的字符,不包含回车符,字符之间无间隔,连续输出,示例格式如下:

理斯卫… (后略,共10个字符)

...
d = {}
...
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
...

答案2

思路2

与题目1的主要区别在于:
① 不筛除标点符号,只筛除换行符号(\n)
② 输出出现频率排名前10的字符

代码2

f = open('命运.txt','r')
txt = f.read()
d = {}
for i in txt:
	if i not in "\n":
		d[i] = d.get(i,0) + 1 
ls = list(d.items())
ls.sort(key = lambda x:x[1],reverse = True)
for k in range(10): #输出排名前十的字符串即可
	print(ls[k][0])

问题3

问题3 (10分) :在PY301-3. py文件中修改代码,对“命运. txt”文件进行字符频次统计,将所有字符按照频次从高到低排序,字符包括中文、标点、英文等符号,但不包含空格和回车。将排序后的字符及频次输出到考生文件夹下,文件名为“命运-频次排序. txt”。字符与频次之间采用英文冒号”:”分隔,各字符之间采用英文逗号”,”分隔,参考CSV格式,最后无逗号,文件内部示例格式如下:

理:224,斯:120,卫:100

提示:建议使用本机提供的Python集成开发环境IDLE编写、 调试及验证程序。

答案3

思路3

特殊要求在于:
① 筛除空格和回车
② 字符和频次之间采用英文冒号:
③ 各字符之间采用英文逗号,分割
④ 输出txt文件,文件名命名为:“命运-频次排序. txt”

答案3

f = open('命运.txt','r')
fi = open('命运-频次排序. txt','w')
txt = f.read()
d = {}

for i in txt:
	if i not in " \n":
		d[i] = d.get(i,0) + 1 

ls = list(d.items())
ls.sort(key = lambda x:x[1],reverse = True)
s = ""
for k in ls:
	s += "{}:{}".format(k[0],k[1]) + ','
	
fi.write(s[:-1])
f.close()
fi.close()

知识点总结

字典:.get()函数的作用

对字典d使用

d.get(i,0) + 1

表示获得d[i],如果该字典的键已经有i,则返回值为0,之后+1
一般都应用在循环遍历中,对出现的字符串逐个计数

字典:.items()返回的类型

对字典如d = {'a':1,'b':2}
使用d.items()返回dict_items类型
使用list(d.items())可以得到如下格式的列表:键值对以元组形式组合,元组作为列表元素

[('a',1),('b',2)]

*注:注意区别d.items()和d.iteritem()的区别,主要是返回对象的类型不同:d.iteritem()返回的类型为generator

sort()函数的作用

sort()函数 与 sorted()函数均可对list进行排序

sort()函数与sorted()函数的区别

①:sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。

②:对于列表list,想要进行排序,要么使用ls.sort()(list本身会改变),要么使用sorted(ls)(list本身不会改变)

key的进阶使用
sort()含有参数key,用来表示依据什么标准来对list进行排序
key = lambda x :x[1]
对于类似于[(a,1),(b,2),....]这类形式的list
使用ls.sort(key = lambda x:x[1],reverse = True),即是将list根据对应的第二个值
(即:上述的lambda x:x[1])进行排序
reverse = True 代表降序;reverse = False 代表升序

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值