news 2026/7/14 15:20:28

python文本操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python文本操作

分享做题遇到的一些利用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传感器信息提取

fi=open("sensor.txt","r") fo=open("earpa001.txt","w") txt=fi.readlines() ls=[] for line in txt: ls=line.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.4

fi = 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") fo=open("八十天环游地球-章节.txt",'w') for i in f: line=i.strip().split() if line[0][0]=="第" and "章" in line[0]: fo.write(i) fo.close() f.close()

输出结果:

1.1.5提取最高词频的词语所在的句子

import jieba fi=open('data3.txt','r') f0=open('out.txt','w') txt=fi.read() #txt为str类型 datas1=jieba.lcut(txt) #lcut只能用于str,根据未替换逗号的原文分词 txt2=txt.replace(',','。') #分句 datas2=txt2.split('。') d={} for data in datas1: if len(data)>=2: d[data]=d.get(data,0)+1 ls=list(d.items()) ls.sort(key=lambda x:x[1],reverse=True) for i in datas2: if ls[0][0] in i: #如果最高频次的词在句子中,则输出 f0.write(i.strip()+'\n') f0.close() fi.close()

1.2提取在某范围内的内容

方法1:

fo = 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()

方法2:

fi=open('candidate0.txt','r') f0=open('candidate.txt','w') txt=fi.readlines() d={} for line in txt: cj=line.strip('\n').split(' ')[2:] xh = line.strip('\n').split(' ')[0] name=line.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") flag=False 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 count+=1 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: name=line.split(':')[0] num=eval(line.split(':')[-1]) lcnum.append([name,num]) lcnum.sort(key=lambda x:x[1], reverse= True) lz = 0 lw = 0 for l in lcnum: if l[1]>10000: lw+=1 elif l[1]==0: lz+=1 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(key=lambda x:eval(x[1]),reverse=True) 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 个人成绩信息提取

方法1:

fo = 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()

方法2:

fo = open("PY202.txt","w") data = input("请输入课程名及对应的成绩:") # 课程名 考分 d={} while data: fs=data.split(' ')[1] km=data.split(' ')[0] d[km]=fs data = input("请输入课程名及对应的成绩:") ls=list(d.items()) ls.sort(key=lambda x:x[1],reverse=True) add=0 for i in ls: add+=eval(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问题的书写 #f=open(filename,'r',encoding='utf-8') f=open('data.txt','r',encoding='utf-8') data=f.read() f.close() f=open('clean.txt','w') s='' x=',。?、‘’“”;:、 )\n——(!' for i in data: if i not in x: s+=i 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()

输出结果:45

3.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))

输出结果:129

3.2分组汇总

3.2.1统计记录数

方法1:

fi=open("earpa001.txt","r") fo=open("earpa001_count.txt","w") d = {} txt=fi.readlines() ls1=[] for line in txt: ls1 = line.strip("\n").split(",") str=ls1[-2]+"-"+ls1[-1] if str in d: d[str]+=1 else: d[str]=1 ls = list(d.items()) ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序 for j in range(len(ls)): fo.write('{},{}\n'.format(ls[j][0],ls[j][1])) fi.close() fo.close()

方法2

fi=open('earpa001.txt','r') fo=open('earpa001_count.txt','w') txt=fi.readlines() d = {} for line in txt: data = line.strip('\n').split(',') name=data[-2]+'-'+data[-1] d[name]=d.get(name,0)+1 ls = list(d.items()) ls.sort(key=lambda x:x[1], reverse=True) # 该语句用于排序 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) n+=1 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 f=open('clean.txt','r') data=f.read() l=jieba.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") datas=f.readlines() l=[] for i in range(len(datas)): line=datas[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[i+1]]) else: data=''.join(datas[l[i]:]) s=data.split()[0] words=jieba.lcut(data) d={} for y in words: if len(y)<2: continue d[y]=d.get(y,0)+1 lis=list(d.items()) lis.sort(key=lambda x:x[1],reverse=True) print(s,lis[0][0],lis[0][1]) f.close()

输出结果:

3.2.5汇总各科总成绩并输出前十名

方法1:

L=[] 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(key=lambda x:x[-1],reverse=True) for i in range(10): fi.write(' '.join(L[i][:-1]) + '\n') fo.close() fi.close()

方法2:

fi=open('score.txt','r') f0=open('candidate0.txt','w') txt=fi.readlines() ls=[] for line in txt: name=line.strip('\n').split(' ')[1] cj=line.strip('\n').split(' ')[2:] sum=0 for i in cj: sum+=eval(i) ls.append([name,sum,line[::]]) ls.sort(key=lambda x:x[1],reverse=True) 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: i=i.strip().split(',') ts[i[0]]=eval(i[2]) sumtime+=eval(i[1]) print('the total execute time is ', sumtime) tns = list(ts.items()) tns.sort(key=lambda x: x[1], reverse=True) for i in range(3): print('the top {} percentage time is {}, spent in "{}" operation'.format(i, tns[i][1],tns[i][0]))

输出结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:19:19

EasyGank多模块构建指南:Gradle配置与多渠道打包的完整流程

EasyGank多模块构建指南&#xff1a;Gradle配置与多渠道打包的完整流程 【免费下载链接】EasyGank &#x1f48a; The project build framework based on the Rx series and MVP pattern. 项目地址: https://gitcode.com/gh_mirrors/ea/EasyGank EasyGank是一个基于Rx…

作者头像 李华
网站建设 2026/7/14 15:15:20

Windows APK安装器:轻松在Windows上安装安卓应用

Windows APK安装器&#xff1a;轻松在Windows上安装安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想要在Windows电脑上安装安卓应用&#xff0c;却…

作者头像 李华
网站建设 2026/7/14 15:15:00

高压隔离通信方案:TLP2770光耦与R7FA2L1AB2DFP MCU实战

1. 项目背景与需求分析在工业自动化、电力电子和医疗设备等领域&#xff0c;高压元件与低压控制系统的安全隔离与可靠通信一直是个经典难题。我最近在一个医疗影像设备的电源模块改造项目中&#xff0c;就遇到了这样的挑战&#xff1a;需要将600V直流母线侧的电压采样信号安全传…

作者头像 李华
网站建设 2026/7/14 15:14:57

Navicat无限试用终极指南:3种专业方法彻底解除14天限制

Navicat无限试用终极指南&#xff1a;3种专业方法彻底解除14天限制 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Nav…

作者头像 李华