分享做题遇到的一些利用python所完成的文本txt操作感觉日常工作学习中可以用得到( •̀ ω •́ )y将持续补充...注文本文件和执行的py文件需要在同一个路径下。题目和答案来自未来教育题库如有侵权请联系笔者删除目录一、文本提取1.1提取含关键词的内容1.1.1传感器信息提取1.1.2图片URL信息提取1.1.3大学信息提取1.1.4提取章节标题1.1.5提取最高词频的词语所在的句子1.2提取在某范围内的内容1.3提取关键词之后的内容1.3.1论语原文内容提取1.5 提取指定数据1.4提取极值1.4.1班级成绩信息提取1.4.1-1提取名字和成绩信息1.4.1-2提取最高分1.4.1-3计算各班的平均分1.4.2 个人成绩信息提取二、文本内容清洗2.1去除文本中内的内容2.2去除文本的中文标点符号三、文本内容汇总统计3.1不分组汇总3.1.1统计图片URL数量3.1.2统计文件中不同字符的数量3.2分组汇总3.2.1统计记录数3.2.2统计文件中含某词眼的内容的数量3.2.3统计词频并打印词频前十的词3.2.4汇总各章节的高频词3.2.5汇总各科总成绩并输出前十名3.2.6汇总各个操作花费的时间一、文本提取1.1提取含关键词的内容1.1.1传感器信息提取fiopen(sensor.txt,r) foopen(earpa001.txt,w) txtfi.readlines() ls[] for line in txt: lsline.strip(\n).split(,) if earpa001 in ls:#注意earpa001前有一个空格 fo.write({},{},{},{}\n.format(ls[0],ls[1],ls[2],ls[3])) fi.close() fo.close()输出结果1.1.2图片URL信息提取webpage.txt中的图片的URL信息:fi open(webpage.txt) datas fi.readlines() fo open(images.txt,w) for data in datas: if .JPG in data: data data.split(src)[1].split()[0] fo.write(data\n) fi.close() fo.close()输出结果:1.1.3大学信息提取操作同1.4fi open(data.txt, r) # 此处可多行 f open(univ.txt, w) lines fi.readlines() for line in lines: if alt in line: line line.split(alt)[1].split()[0] f.write(line\n) fi.close() f.close()输出结果1.1.4提取章节标题f open(八十天环游地球.txt) foopen(八十天环游地球-章节.txt,w) for i in f: linei.strip().split() if line[0][0]第 and 章 in line[0]: fo.write(i) fo.close() f.close()输出结果:1.1.5提取最高词频的词语所在的句子import jieba fiopen(data3.txt,r) f0open(out.txt,w) txtfi.read() #txt为str类型 datas1jieba.lcut(txt) #lcut只能用于str根据未替换逗号的原文分词 txt2txt.replace(,。) #分句 datas2txt2.split(。) d{} for data in datas1: if len(data)2: d[data]d.get(data,0)1 lslist(d.items()) ls.sort(keylambda x:x[1],reverseTrue) for i in datas2: if ls[0][0] in i: #如果最高频次的词在句子中则输出 f0.write(i.strip()\n) f0.close() fi.close()1.2提取在某范围内的内容方法1fo open(candidate0.txt, r) fi open(candidate.txt, w) L [] # 存储候选人 lines fo.readlines() for line in lines: line line.strip() student line.split( ) for i in student[-10:]: if int(i) 60: break else: L.append(student[:2]) for i in L: fi.write( .join(i) \n) fo.close() fi.close()方法2fiopen(candidate0.txt,r) f0open(candidate.txt,w) txtfi.readlines() d{} for line in txt: cjline.strip(\n).split( )[2:] xh line.strip(\n).split( )[0] nameline.strip(\n).split( )[1] d[xh]name for i in cj: if eval(i)60: d.pop(xh,[]) for i in d: f0.write({}{}\n.format(i,d[i])) f0.close() fi.close()输出结果1.3提取关键词之后的内容1.3.1论语原文内容提取题目读取文本只保留原文的内容并去掉行首和行尾的空格输出到一个新文本文件原文本内容执行代码fi open(论语.txt,r) fo open(论语-原文.txt, w) flagFalse for line in fi: if【注释】 in line: flag False if 【原文】 in line: flag True continue if flag True: fo.write(line.lstrip()) fi.close() fo.close()输出结果1.5 提取指定数据fi open(data301.txt,r) f open(result301.txt,w) cnumd {} name count 0 flag 1 for line in fi: if name: in line: name line.split()[-2] flag 1 elif value: in line and flag 1: dx line.split(:)[-1] cnumd[name] dx flag 0 count1 for d in cnumd.items(): f.write({}:{}\n.format(d[0],d[1])) print(一共有{}个地区.format(count)) f.close() fi.close()输出结果lcnum [] with open(result301.txt, r) as fi: for line in fi: if len(line)2: nameline.split(:)[0] numeval(line.split(:)[-1]) lcnum.append([name,num]) lcnum.sort(keylambda x:x[1], reverse True) lz 0 lw 0 for l in lcnum: if l[1]10000: lw1 elif l[1]0: lz1 print(新冠确诊人数最多的地区是{},人数是{}.format(lcnum[0][0],lcnum[0][1] )) print(新冠确诊人数超过1W的地区有{}个.format(lw)) print(新冠确诊人数为0的地区有{}个.format(lz))输出结果1.4提取极值1.4.1班级成绩信息提取1.4.1-1提取名字和成绩信息fi open(data.txt,r) fo open(studs.txt,w) students fi.readlines() for i in students: i i.strip().split(:) name i[0] score i[1].split(,)[-1] fo.write(name:score\n) fi.close() fo.close()输出结果1.4.1-2提取最高分fi open(data.txt,r) students fi.readlines() l[] for i in students: i i.strip().split(:) name i[0] score i[1].split(,)[-1] l.append([name,score]) l.sort(keylambda x:eval(x[1]),reverseTrue) print(l[0][0]:l[0][1]) fi.close()输出结果1.4.1-3计算各班的平均分fi open(data.txt,r) d {} students fi.readlines() for i in students: i i.strip().split(:) clas,score i[1].split(,) d[clas] d.get(clas,[])[eval(score)] for i in d: avg_score sum(d[i])/len(d[i]) print({}:{:.2f}.format(i,avg_score))输出结果1.4.2 个人成绩信息提取方法1fo open(PY202.txt,w) data input(请输入课程名及对应的成绩) # 课程名 考分 course_score_dict {} while data: course, score data.split( ) course_score_dict[course] eval(score) data input(请输入课程名及对应的成绩) course_list sorted(list(course_score_dict.values())) max_score, min_score course_list[-1], course_list[0] average_score sum(course_list) / len(course_list) max_course, min_course , for item in course_score_dict.items(): if item[1] max_score: max_course item[0] if item[1] min_score: min_course item[0] fo.write(最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}.format( max_course, max_score, min_course, min_score, average_score)) fo.close()方法2fo open(PY202.txt,w) data input(请输入课程名及对应的成绩) # 课程名 考分 d{} while data: fsdata.split( )[1] kmdata.split( )[0] d[km]fs data input(请输入课程名及对应的成绩) lslist(d.items()) ls.sort(keylambda x:x[1],reverseTrue) add0 for i in ls: addeval(i[1]) fo.write(最高分课程是{} {}, 最低分课程是{} {}, 平均分是{:.2f}.format(ls[0][0],ls[0][1],ls[-1][0],ls[-1][1],add/len(ls))) fo.close()输出结果二、文本内容清洗2.1去除文本中内的内容原文本fi open(论语-原文.txt, r) fo open(论语-提纯原文.txt, w) for line in fi: for i in range(1,23):#由于最大为内最小数字为1最大数字为22 line line.replace(({}).format(i),) fo.write(line) fi.close() fo.close()输出结果2.2去除文本的中文标点符号#解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte问题的书写 #fopen(filename,r,encodingutf-8) fopen(data.txt,r,encodingutf-8) dataf.read() f.close() fopen(clean.txt,w) s x。、‘’“”、 \n—— for i in data: if i not in x: si f.write(s) f.close()输出结果三、文本内容汇总统计3.1不分组汇总3.1.1统计图片URL数量fi open(webpage.txt) datas fi.readlines() num 0 for data in datas: if .JPG in data: num 1 print(num) fi.close()输出结果453.1.2统计文件中不同字符的数量f open(data1.txt) ls [] for line in f: for c in line: if c not in ls: ls.append(c) f.close() print(len(ls))输出结果1293.2分组汇总3.2.1统计记录数方法1fiopen(earpa001.txt,r) foopen(earpa001_count.txt,w) d {} txtfi.readlines() ls1[] for line in txt: ls1 line.strip(\n).split(,) strls1[-2]-ls1[-1] if str in d: d[str]1 else: d[str]1 ls list(d.items()) ls.sort(keylambda x:x[1], reverseTrue) # 该语句用于排序 for j in range(len(ls)): fo.write({},{}\n.format(ls[j][0],ls[j][1])) fi.close() fo.close()方法2fiopen(earpa001.txt,r) foopen(earpa001_count.txt,w) txtfi.readlines() d {} for line in txt: data line.strip(\n).split(,) namedata[-2]-data[-1] d[name]d.get(name,0)1 ls list(d.items()) ls.sort(keylambda x:x[1], reverseTrue) # 该语句用于排序 for i in ls: fo.write({},{}\n.format(i[0],i[1])) fo.close() fi.close()输出结果3.2.2统计文件中含某词眼的内容的数量f open(univ.txt, r) n 0 # 包含大学的名称数量 L [] lines f.readlines() for line in lines: if 学院 in line and 大学 in line and 大学生 not in line: L.append(line) n1 elif 学院 in line: L.append(line) elif 大学 in line and 大学生 not in line: L.append(line) n 1 for i in L: print(i,end) f.close() print(包含大学的名称数量是{}.format(n)) print(包含学院的名称数量是{}.format(len(L)-n))输出结果3.2.3统计词频并打印词频前十的词补充安装结巴库import jieba fopen(clean.txt,r) dataf.read() ljieba.lcut(data) d {} for i in l: if len(i)3: d[i] d.get(i,0)1 lt list(d.items()) lt.sort(key lambda x:x[1],reverse True) for i in lt[:9]: print(i[0],:,i[1],end,,sep) print(lt[9][0],:,lt[9][1],sep) f.close()输出结果3.2.4汇总各章节的高频词import jieba f open(八十天环游地球.txt) datasf.readlines() l[] for i in range(len(datas)): linedatas[i].split( ) if datas[i][0]第 and 章 in line[0]: l.append(i) #汇总各章节名所在的行数 for i in range(len(l)): if i !len(l)-1: data.join(datas[l[i]:l[i1]]) else: data.join(datas[l[i]:]) sdata.split()[0] wordsjieba.lcut(data) d{} for y in words: if len(y)2: continue d[y]d.get(y,0)1 lislist(d.items()) lis.sort(keylambda x:x[1],reverseTrue) print(s,lis[0][0],lis[0][1]) f.close()输出结果3.2.5汇总各科总成绩并输出前十名方法1L[] fo open(score.txt, r) fi open(candidate0.txt, w) lines fo.readlines() for line in lines: line line.strip() student line.split( ) sum 0 for i in range(1,11): sum int(student[-i]) student.append(str(sum)) L.append(student) L.sort(keylambda x:x[-1],reverseTrue) for i in range(10): fi.write( .join(L[i][:-1]) \n) fo.close() fi.close()方法2fiopen(score.txt,r) f0open(candidate0.txt,w) txtfi.readlines() ls[] for line in txt: nameline.strip(\n).split( )[1] cjline.strip(\n).split( )[2:] sum0 for i in cj: sumeval(i) ls.append([name,sum,line[::]]) ls.sort(keylambda x:x[1],reverseTrue) for i in ls[:10]: f0.write(i[2].strip(\n)\n) f0.close() fi.close()输出结果3.2.6汇总各个操作花费的时间sumtime 0 percls [] ts {} with open(out.txt, r) as f: for i in f: ii.strip().split(,) ts[i[0]]eval(i[2]) sumtimeeval(i[1]) print(the total execute time is , sumtime) tns list(ts.items()) tns.sort(keylambda x: x[1], reverseTrue) for i in range(3): print(the top {} percentage time is {}, spent in {} operation.format(i, tns[i][1],tns[i][0]))输出结果