在刷计算机二级操作题题库时候,无论是未来教育、python123以及其他平台资源,想必大家都会遇到最后一道操作题是关于论语文本提纯的问题。初次看到的这种题目的小白,眼里就是这是什么鬼呀,看不懂呀,怎么嵌套了这么多的循环???

代码与论语文本资料可以在github上获得:https://github.com/Muzi828/The-Analects,接下来就开始进行实际操作。

part 1

预备知识 replace使用

s1 = "1·1子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”"
print(s1.replace("1·1","")) #目的是去掉前面的数字标号
print(s1)  #replace方法不改变原字符串
s1=s1.replace("1·1","")
print(s1)  #需要将replace后的字符重新赋给原字符串,完成内容的修改 
==>> 子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”
==>> 1·1子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”
==>> 子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”

第一步 文件打开及内容读取

fi = open("C:/Users/86177/Desktop/论语-网络版.txt","r") #选择文件放置的位置,注意位置符。
fi.read()   
==>> UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence

出现此类错误,使用“utf-8”编码一般就可以解决。

fi = open("C:/Users/86177/Desktop/论语-网络版.txt","r",encoding = "utf-8") #一般添加编码utf-8再读入即可
fi.read(500) #读入前500字符
==>> '\ufeff论语全篇 学而篇第一\n\n  【本篇引语】\n\n  《学而》是《论语》第一篇的篇名。
《论语》中各篇一般都是以第一章的前二三个字作为该篇的篇名。《学而》一篇包括16章,内容涉及
诸多方面。其中重点是“吾日三省吾身”;“节用而爱人,使民以时”;“礼之用,和为贵”以及仁、孝、
信等道德范畴。\n\n  【原文】\n\n  1·1子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自
远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”\n\n  【注释】\n\n  (1)子
:中国古代对于有地位、有学问的男子的尊称,有时也泛称男子。《论语》书中“子曰”的子,都是指孔子而言
(2)学:孔子在这里所讲的“学”,主要是指学习西周的礼、乐、诗、书等传统文化典籍。\n\n
(3)时习:在周秦时代,“时”字用作副词,意为“在一定的时候”或者“在适当的时候”。但朱熹在《论语集注》
一书中把“时”解释为“时常”。“习”,指演习礼、乐;复习诗、书。也含有温习、实习、练习的意思。\n\n
(4)说:音yuè,同悦,愉快、高兴的意思。\n\n  (5)有朋:一本作“友朋”。旧注说,“同门曰朋”,即
同在一位老师'

第二步将原文写入到目标文件夹

对文本进行分析可知:要求写入的内容都在“【原文】”后边,所以在读取时候遇到“【原文】”标志即可读入之后的内容。而对于“【】”之中其他的内容,过滤掉即可。

fi = open("C:/Users/86177/Desktop/论语-网络版.txt","r",encoding = "utf-8")
fo = open("C:/Users/86177/Desktop/论语-网络版1.txt","w")
flag = False                                    #设置标记
for line in fi: if "【" in line:    flag = False                             #过滤掉其他【】中不需要的信息if "【原文】" in line:flag = Truecontinueif flag == True:fo.write(line)
fi.close()
fo.close()

第三步 去掉每句话前面的编号

#先举个栗子,将下面四句话前面的数字编号去掉s2 = "1·1子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”\1·2有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”\9·14子欲居九夷(1)。或曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”\11·12季路问事鬼神。子曰:“未能事人,焉能事鬼?”曰:“敢问死。”曰:“未知生,焉知死?”"#观察一下结构可以发现最前面都是由“数字·数字”组成的,因此可以想到下面操作for i in range(12):                                        #左侧的最大值为11,括号内取12for j in range(13):                                    #右侧最大值为13,括号内取13 s2 = s2.replace("{}·{}".format(i,j),"")           #一步将前面数字替换成 空 字符
print(s2)
==>> '子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠
(8),不亦君子(9)乎?”      有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作
乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”      4子欲居九夷(1)。
或曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”      12季路问事鬼神。子曰:“未能事人,焉能事
鬼?”曰:“敢问死。”曰:“未知生,焉知死?”'

结果呢???   一脸问号!!!  这怎么前面还有数字,按理说不是全变成  “空”  字符了吗???

为了更直观地展示,将 “空” 字符换成 “*” 字符,然后在进行同样的操作,看看是不是发现了什么???

s2 = "1·1子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”\1·2有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”\9·14子欲居九夷(1)。或曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”\11·12季路问事鬼神。子曰:“未能事人,焉能事鬼?”曰:“敢问死。”曰:“未知生,焉知死?”"for i in range(12):for j in range(13):s2 = s2.replace("{}·{}".format(i,j),"**")
print(s2)
==>> '**子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠
(8),不亦君子(9)乎?”      **有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好
作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”      **4子欲居九夷
(1)。或曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”      1**2季路问事鬼神。子曰:“未能事人,
焉能事鬼?”曰:“敢问死。”曰:“未知生,焉知死?”'

是不是最终发现,即使你遍历循环的值超过10,甚至都到12了,但是最后还是只占据了一个位置,显示一个 “*”。故:最终只是替换了一个占位符而已,所以上述代码在遍历循环时候只要输入10即可。

for i in range(10):                                  #由上可知,一个数字只形成一个占位符,可以遍历0-9(包括0和9),也就是输入10s2 = s2.replace("*{}".format(i),"**")            #将右侧的数字变成“*”
for i in range(10):s2 = s2.replace("{}*".format(i),"**")            #将左侧的数字变成“*”
print(s2)
==>> '**子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠
(8),不亦君子(9)乎?”      **有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好
作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”      ***子欲居九夷
(1)。或曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”      ****季路问事鬼神。子曰:“未能事人,
焉能事鬼?”曰:“敢问死。”曰:“未知生,焉知死?”'

此时我们已经完成了前面数字标号的全部替换,最后一步直接将这些 “*” 变成 “空” 字符即可。

s2 = s2.replace("*","")                              #最后完成“*”字符的去除
print(s2)
==>> '子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠
(8),不亦君子(9)乎?”      有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作
乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”      子欲居九夷(1)。或
曰:“陋(2),如之何?”子曰:“君子居之,何陋之有?”      季路问事鬼神。子曰:“未能事人,焉能事鬼?”
曰:“敢问死。”曰:“未知生,焉知死?”'

第四步将内容写入目标文件

此处只是保证操作步骤的完整,进行示意,具体的原文内容写入到目标文件可以参考第二步

fo.write(s2)  #此处只是为了展示步骤的完整性。具体的看下面的完整代码

第五步 代码汇总

#完整代码如下fi = open("C:/Users/86177/Desktop/论语-网络版.txt","r",encoding = "utf-8")
fo = open("C:/Users/86177/Desktop/论语-网络版1.txt","w")
flag = False
for line in fi: if "【" in line:flag = Falseif "【原文】" in line:flag = Truecontinueif flag == True:for i in range(10):for j in range(10):line = line.replace("{}·{}".format(i,j),"**")for i in range(10):line = line.replace("{}*".format(i),"")for i in range(10):line = line.replace("*{}".format(i),"")line = line.replace("*","")fo.write(line.lstrip())                     #实现目标格式输出,去掉左侧不必要的符号                           fi.close()
fo.close()

part 2

有了part 1的梳理之后,part 2中只需要将“(数字)”看做一个整体进行替换即可。代码如下:

fi = open("C:/Users/86177/Desktop/论语-网络版1.txt", "r")
fo = open("C:/Users/86177/Desktop/论语-原文.txt", "w")
for line in fi:     for i in range(50): #数字要根据文本中的标志最大值设定,论语中语录比较简单,标记较少,为了确保不漏掉可以稍微设置大一些                                                     line=line.replace("({})".format(i), "") #构造(i)并替换fo.write(line)
fi.close()
fo.close()

附:

part2 论语提纯原文

part1 论语-网络版1

【python计算机二级】python论语文本提纯-计算机二级操作题相关推荐

  1. 计算机二级ppt操作题内容,计算机二级考试ms office考试题库ppt 操作题附答案

    计算机二级考试ms office考试题库ppt 操作题附答案 请在[答题]菜单下选择[进入考生文件夹]命令,并按照题目要求完成下面的操作.注意:以下的文件必须保存在考生文件夹下文慧是新东方学校的人力资 ...

  2. 某高校计算机系举办了一场,国家二级MS+OFFICE高级应用机试(操作题)-试卷25

    国家二级MS OFFICE高级应用机试(操作题)-试卷25 (总分:6.00,做题时间:90分钟) 一. Word字处理软件的使用(总题数:1,分数:2.00) 1.请在"答题"菜 ...

  3. 计算机维修调试高级,计算机安装调试维修四级操作题

    计算机安装调试维修员操作题 四级 一.多媒体计算机外围设备安装及使用:(20分) 1.正确连接给定的摄像头和打印机.利用现有的设备使连接的摄像头和打印机正常工作, 即摄录你个人一张照片及在照片中添加考 ...

  4. 本科计算机知识点,2018年电大本科计算机网考操作题题库重要知识点(6页)-原创力文档...

    计算机应用基础网考操作题(小抄) 计算机应用基础网考操作题(小抄) PAGE # 小炒 小炒 WINDOWS 请在考牛文件夹下完成如下操作: 在考生文件夹下建立"图片2"文件夹: ...

  5. 233网校计算机二级百度云盘6,2014年计算机二级考试《 Access》机考操作题题库(6)...

    基本操作题 一.基本操作题(共18分)1 (1)新建数据库"Acc1.mdb",将考试文件夹下的"饮料.xls"和"类别.xls"导人&qu ...

  6. 南京廖华计算机二级考试答案,计算机二级考试MS Office考试题库ppt 操作题附答案...

    请在[答题]菜单下选择[进入考生文件夹]命令,并按照题目要求完成下面的操作. 注意:以下的文件必须保存在考生文件夹下 文慧是新东方学校的人力资源培训讲师,负责对新入职的教师进行入职培训,其PowerP ...

  7. 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...

    浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx 第 PAGE 26 页 共 NUMPAGES 36 页 浙江大学远程教育学院机试题 Windows操作题( ...

  8. 【江苏二级Python】8套历年真题及答案

    目录 评分细则 江苏二级Python第一套 单选(基础知识) 程序设计 操作题 江苏二级Python第二套 基础知识 程序设计 操作题 ***3.*** 江苏二级Python第三套 基础知识 程序设计 ...

  9. 用计算机考试不保存直接提交,计算机一级考试操作题没储存,然后就交卷,系统会自动储存答案吗?有...

    计算机一级考试操作题没储存,然后就交卷,系统会自动储存答案吗?有以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机一 ...

最新文章

  1. 3168串口java_电子称串口读取数据(转)
  2. sql同时操作两列_SQL简单查询
  3. 第13章:项目合同管理(2)-章节重点
  4. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games
  5. STM-1和SDH的关系
  6. jQuery:实现排他
  7. 线性四叉树的实现C++
  8. 1997年考研数学一解析pdf
  9. Win10访问不了Samba网络共享的原因以及解决办法
  10. (java毕业设计)基于java学生宿舍管理系统
  11. Google Earth Engine APPS(GEE)——使用 AREA2 和 CODED 估算森林砍伐和退化面积巴西森林砍伐案例总览
  12. l310加完墨水后需要怎样设置_epson打印机没有墨水加了墨水后还是打印不了怎么解决...
  13. BZOJ4567[Scoi2016]背单词
  14. PCF8591详解(蓝桥杯单片机模块(IIC总线))
  15. 终极单词index 排序 K-L
  16. vue-router防跳墙控制
  17. slice在php里面什么意思,js中slice()使用方法
  18. 电影(0x05 排序)
  19. 技本功丨互联网+工业视觉异常检测分析
  20. JAVA通信(二)——实现客户机和服务器通信

热门文章

  1. 什么是单页应用?它的优缺点?其缺点的解决方案是什么?
  2. 设计模式之状态模式详解
  3. 人群计数主流数据集介绍
  4. linux给固态4k对齐,linux查看硬盘4K对齐方法
  5. 超详细的线程池原理解析
  6. 互联网金融概念--关于小贷公司和消费金融公司
  7. 60行代码 5分钟开发一个数字货币行情软件
  8. 用什么软件测试光纤稳定性,工欲善其事,谈谈光纤的几种常用工具用途及使用方法!...
  9. --spring.profiles.active=prod 无效问题
  10. amd速龙黑苹果内核补丁_Lilu.kext v1.4.2 黑苹果内核扩展补丁