Python编程实验五:文件的读写操作

目录

一、实验目的与要求

二、实验内容

三、主要程序清单和程序运行结果

第1题

第2题

四、实验结果分析与体会


一、实验目的与要求

(1)通过本次实验,学生应掌握与文件打开、关闭相关的函数,以及与读写操作相关的常用方法的使用;
(2)理解基于文件的词频统计以及数据分析的基本思路,能根据问题需要灵活选择合适的数据结构;
(3)综合应用所学知识实现对问题的编程求解;
(4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)

二、实验内容

使用Python语言在Jupyter Notebook环境下编程完成下列题目的要求:

1、实验5素材文件夹下的文件 data.txt 是一个来源于网上的技术信息资料。

问题1:用 Python 语言中文分词第三方库 jieba 对文件 data.txt 进行分词,并选择长度大于等于3个字符的关键词,写入文件 out1.txt , 每行一个关键词,各行的关键词不重复,输出顺序不做要求,例如:
人工智能
科幻小说
……

问题2:对实验5素材文件夹下的文件 data.txt 进行分词,对长度不少于3个字符的关键词,统计出现的次数,按照出现次数由大到小的顺序输出到文件 out2.txt ,每行一个关键词及其出现次数,例如:
科学家:2
达特茅斯:1
……

2、某班学生评选一等奖学金,学生的10门主干课成绩存在于实验5素材文件夹下文件 score.txt 中, 每行为一个学生的信息,分别记录了学生学号、姓名以及10门课成绩,格式如下:

1820161043 郑珉镐 68 66 83 77 56 73 61 69 66 78
1820161044 沈红伟 91 70 81 91 96 80 78 91 89 94
……

从这些学生中选出奖学金候选人,条件是:①总成绩排名在前10名;②全部课程及格(成绩大于等于60)。

问题1:给出按总成绩从高到低排序的前10名学生名单,并写入文件 candid1.txt ,每行记录一个学生的信息,分别为学生学号、姓名以及10门课成绩。

问题2:读取文件 candid1.txt ,从中选出候选人,并将学号和姓名写入文件 candid2.txt 格式如下:

1010112161722张三
1010112161728李四
......

实验素材下载地址:https://download.csdn.net/download/Morse_Chen/88887343?spm=1001.2014.3001.5503

三、主要程序清单和程序运行结果

第1题

1、实验5素材文件夹下的文件 data.txt 是一个来源于网上的技术信息资料。

问题1:用 Python 语言中文分词第三方库 jieba 对文件 data.txt 进行分词,并选择长度大于等于3个字符的关键词,写入文件 out1.txt , 每行一个关键词,各行的关键词不重复,输出顺序不做要求,例如:
人工智能
科幻小说
……

问题2:对实验5素材文件夹下的文件 data.txt 进行分词,对长度不少于3个字符的关键词,统计出现的次数,按照出现次数由大到小的顺序输出到文件 out2.txt ,每行一个关键词及其出现次数,例如:
科学家:2
达特茅斯:1
……

import jiebawith open("data.txt", "r") as f:content = f.read()
words = set()
seg_list = jieba.cut(content)
for word in seg_list:if len(word) >= 3:words.add(word)
with open("out1.txt", "w") as f:for word in words:f.write(word + "\n")from collections import Counterwith open("data.txt", "r") as f:content = f.read()
words = []
seg_list = jieba.cut(content)
for word in seg_list:if len(word) >= 3:words.append(word)
word_count = Counter(words)
sorted_word_count = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
with open("out2.txt", "w") as f:for word, count in sorted_word_count:f.write(f"{word}:{count}\n")

        使用了jieba库来进行文本处理,并将处理结果写入文件。

        首先,打开一个名为 "data.txt" 的文件,并读取文件内容。然后使用 jieba.cut() 方法对文本进行分词,得到分词结果。接着,它遍历分词结果,并将长度大于等于3的词添加到一个名为 "words" 的集合中,并将这些词写入名为 "out1.txt" 的文件中。

        接下来,它再次打开 "data.txt" 文件并读取内容,然后使用 jieba.cut() 方法对文本进行分词,得到分词结果。同样地,它筛选出长度大于等于3的词并将它们添加到名为 "words" 的列表中。然后使用 collections.Counter() 方法统计每个词出现的次数,将统计结果按词频排序,并将排序后的结果写入名为 "out2.txt" 的文件中。

运行结果: 

    ……     

    ……     

第2题

2、某班学生评选一等奖学金,学生的10门主干课成绩存在于实验5素材文件夹下文件 score.txt 中, 每行为一个学生的信息,分别记录了学生学号、姓名以及10门课成绩,格式如下:

1820161043 郑珉镐 68 66 83 77 56 73 61 69 66 78
1820161044 沈红伟 91 70 81 91 96 80 78 91 89 94
……

从这些学生中选出奖学金候选人,条件是:①总成绩排名在前10名;②全部课程及格(成绩大于等于60)。

问题1:给出按总成绩从高到低排序的前10名学生名单,并写入文件 candid1.txt ,每行记录一个学生的信息,分别为学生学号、姓名以及10门课成绩。

问题2:读取文件 candid1.txt ,从中选出候选人,并将学号和姓名写入文件 candid2.txt 格式如下:

1010112161722张三
1010112161728李四
......

with open("score.txt", "r") as f:content = f.readlines()
students = []
for line in content:info = line.split()student_id = info[0]student_name = info[1]scores = list(map(int, info[2:]))total_score = sum(scores)students.append((student_id, student_name, scores, total_score))sorted_students = sorted(students, key=lambda x: x[3], reverse=True)with open("candid1.txt", "w") as f:for student in sorted_students[:10]:student_id, student_name, scores, _ = studentf.write(f"{student_id} {student_name} {' '.join(map(str, scores))}\n")with open("candid1.txt", "r") as f:content = f.readlines()
selected_students = []
for line in content:info = line.split()student_id = info[0]student_name = info[1]scores = list(map(int, info[2:]))if all(score >= 60 for score in scores):selected_students.append((student_id, student_name))with open("candid2.txt", "w") as f:for student in selected_students:student_id, student_name = studentf.write(f"{student_id} {student_name}\n")

        这段代码首先打开名为 "score.txt" 的文件,读取文件内容并按行存储在列表 content 中。然后,它遍历 content 列表中的每一行,将每行按空格分割成一组信息,包括学生ID、学生姓名和各科成绩。成绩部分被转换为整数类型并计算总成绩,然后将学生的信息以元组形式存储在 students 列表中。

        接着,代码对 students 列表中的学生信息根据总成绩进行降序排序,得到了 sorted_students 列表。

        然后,代码打开名为 "candid1.txt" 的文件,将排名前10的学生信息写入文件中,每行包括学生ID、学生姓名和各科成绩。

        接着,代码再次打开 "candid1.txt" 文件,读取文件内容并按行存储在列表 content 中。然后,它遍历 content 列表中的每一行,将每行按空格分割成一组信息,包括学生ID、学生姓名和各科成绩。然后判断该学生各科成绩是否都大于等于60分,如果是,则将该学生的学生ID和学生姓名以元组形式存储在 selected_students 列表中。

最后,代码将符合条件的学生信息写入名为 "candid2.txt" 的文件中,每行包括学生ID和学生姓名。

运行结果:

四、实验结果分析与体会

        通过本次实验,掌握了与文件打开、关闭相关的函数,以及与读写操作相关的常用方法的使用;理解基于文件的词频统计以及数据分析的基本思路。在进行文件读写操作时,及时打开和关闭文件是非常重要的,特别是在写操作完成后,一定要确保文件被正确关闭,以避免数据丢失或损坏。在文件操作过程中,可能会遇到各种异常情况,比如文件不存在、权限问题等。因此,对于文件操作,充分的异常处理是必不可少的,这可以通过 try-except 语句来实现。

        Python 提供了多种文件读写模式,包括 "r"(只读)、"w"(只写)、"a"(追加)、"r+"(读写)等。在选择文件模式时,需要根据具体的需求来决定使用哪种模式,以确保操作的正确性和安全性。在文件读写操作中,尤其是处理文本文件时,需要注意文件的编码格式。在打开文件时可以指定编码方式,以便正确地读取和写入文件内容。文件读写过程中,文件指针的位置是非常重要的。在读取文件内容或者进行写入操作时,需要注意文件指针的位置,以确保读写操作的准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中scss样式污染引发的思考

新做了一个项目,就是在登录后,就会产生左侧菜单的按钮颜色不一样。 然后发现样式是从这里传过来的 然后发现是登录页面的css给污染了 就是加了scope就把这个问题解决了 然后想总结一下这个思路:就是如何排查污染样式, 如果出现…

postman测试接口

1、postman测试接口 (1)首先安装postman 下载地址:Download Postman | Get Started for Free 选择对应版本下载,然后安装即可 (2)使用postman发送请求 比如以下这个请求例子: 使用postman发…

SpringBoot集成EasyExcel快速人们

目录 1.背景介绍 2.EasyExcel的使用 1.添加依赖 2.相关代码准备 1.实体类 2.ExcelUtil工具类 3.写入控制类 1.背景介绍 EasyExcel 是阿里巴巴开发的一款基于 Java 的专业化 Excel 操作工具,主要用于在 Java 应用程序中快速、高效地读写 Excel 文件。EasyExce…

Git 指令深入浅出【2】—— 分支管理

Git 指令深入浅出【2】—— 分支管理 分支管理1. 常用分支管理指令2. 合并分支合并冲突合并模式 3. 实战演习 分支管理 1. 常用分支管理指令 # 查看本地分支 git branch# 查看远程分支 git branch -r# 查看全部分支 git branch -aHEAD 指向的才是当前的工作分支 # 查看当前分…

开源的 Python 数据分析库Pandas 简介

阅读本文之前请参阅-----如何系统的自学python Pandas 是一个开源的 Python 数据分析库,它提供了高性能、易用的数据结构和数据分析工具。Pandas 特别适合处理表格数据,例如时间序列数据、异构数据等。以下是对 Pandas 的简明扼要的介绍,包括…

基于springboot实现旅游路线规划系统项目【项目源码+论文说明】

基于springboot实现旅游路线规划系统演示 摘要 随着互联网的飞速发展以及旅游产业的逐渐升温,越来越多人通过互联网获取更多的旅游信息,包括参考旅游文纪等内容。通过参考旅游博主推荐的旅游景点和规划线路,参考计划着自己的旅行&#xff0c…

【《高性能 MySQL》摘录】第 8 章 优化服务器设置

文章目录 8.1 MySQL 配置的工作原理8.1.1 语法、作用域和动态性8.1.2 设置变量的副作用8.1.3 入门8.1.4 通过基准测试迭代优化 8.2 什么不该做8.3 创建MySQL配置文件8.3.1 检查 MySQL 服务器状态变量 8.4 配置内存使用8.4.1 MySQL 可以使用多少内存8.4.2 每个连接需要的内存8.4…

STL常见容器(list容器)---C++

STL常见容器目录: 6.list容器6.1 list基本概念6.2 list构造函数6.3 list 赋值和交换6.4 list 大小操作6.5 list 插入和删除6.6 list 数据存取6.7 list 反转和排序6.8自定义排序案例 6.list容器 6.1 list基本概念 功能: 将数据进行链式存储; …

Flutter输入框换行后自适应高度

Flutter输入框换行后输入框高度随之增加 效果 设计思想 通过TextEditingController在build中监听输入框,输入内容后计算输入框高度然后自定义适合的值,并且改变外部容器高度达到自适应高度的目的 参考代码 //以下代码中的值只适用于案例,…

MyBatis 学习(一)之 MyBatis 概述

目录 1 MyBatis 介绍 2 MyBatis 的重要组件 3 MyBatis 执行流程 4 参考文档 1 MyBatis 介绍 MyBatis 是一个半自动化的 ORM (Object-Relational Mapping,对象关系映射)持久层框架,它允许开发者通过 XML 或注解将对象与数据库中…

docker的简介--安装--操作命令

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台,用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中,然后部署到任何支持Docker的环境中。Docker的主要特点包括…

【React架构 - Scheduler中的MessageChannel】

前序 我们都知道JS代码是在浏览器5个进程(下面有介绍)中渲染进程中的Js引擎线程执行的,其他还有GUI渲染线程、定时器线程等,而页面的布局和绘制是在GUI线程中完成的,这些线程之间是互斥的,所以在执行Js的同时会阻塞页面的渲染绘制…

android应用开发基础知识,安卓面试2020

第一章:设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章:程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…

用Java语言创建的Spring Boot项目中,如何传递List集合呢?

前言: 在上篇文章中,用Java语言创建的Spring Boot项目中,如何传递数组呢??-CSDN博客,我们了解到Spring Boot项目中如何传递数组,但是,对于同类型的List集合,我们又该如何…

Centos7:自动化配置vim | suoders信任列表添加普通用户

Centos7:自动化配置vim | suoders信任列表添加普通用户 vim 配置原理sudoers系统可信任列表中添加普通用户自动化配置vim vim 配置原理 在目录/etc下有一个vimrc文件,该文件是系统中公共的vim配置文件,对所有用户都成立。  而在每个普通用户…

【Kafka系列 06】Kafka Producer源码解析

温馨提示:本文基于 Kafka 2.3.1 版本。 一、Kafka Producer 原理图 生产者的 API 使用还是比较简单,创建一个 ProducerRecord 对象(这个对象包含目标主题和要发送的内容,当然还可以指定键以及分区),然后调…

poi 设置允许西文在单词中间换行

说明本文是CSDN-问答模块,题主提问。问题描述:poi 设置允许西文在单词中间换行 一、问题描述 poi 设置允许西文在单词中间换行? // 创建一个新的文档XWPFDocument document = new XWPFDocument();// 创建段落XWPFParagraph firstParagraph = document.createParagraph();fir…

2022《OpenScene: 3D Scene Understanding with Open Vocabularies》阅读笔记2

A. Implementation Details 3D Distillation. 我们基于PyTorch实现。为了提取,我们使用Adam[26]作为优化器,初始学习率为1e−4,并训练100个epochs。对于MinkowskiNet,我们对ScanNet和Matterport3D实验使用2cm的体素大小,对nuScenes使用5cm的体素尺寸。对于室内数据集,我…

RTSPServer推流服务

RTSPServer推流服务 1.开发原因 由于项目需要使用,虽然有现成的RTSPServer推流服务,由于是闭源代码,无法查看了解内部的逻辑处理流程,所以急需要一套较为稳定并可以使用的推流服务,并且从网上看大部分的RTSPServer推流…

IntelliJ IDEA 常用快捷键和下载链接

下载链接(windows) 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 编码时: 跳转到引用方法的地方 (有多个引用时会出现下拉列表) ctrl鼠标左键 跳转后回到原来的地方 …