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 jieba

with 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 Counter

with 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, _ = student
        f.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 = student
        f.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.mfbz.cn/a/415584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

74HC04六角逆变器介绍

74HC04系列六角逆变器的输入包括钳位二极管,允许使用限流电阻将输入连接到高于 VCC 的电压。该小工具可使用 2.0 至 6.0 伏的电源工作。当使用上拉电阻时,器件输入与标准 CMOS 输出和 LSTTL 输出兼容。 74HC04基础参数 • 输出驱动能力:10 …

Avalonia学习(二十七)-显示图像

其实和Avalonia没有什么关系,但是还是以其它承载,主要是生成二维码。 主要是库:QRCoder 另外是:SixLabors.ImageSharp,ZXing.ImageSharp.Barcode 用image控件显示bitmap即可。 运行效果

ArmV8架构

Armv8/armv9架构入门指南 — Armv8/armv9架构入门指南 v1.0 documentation 上面只是给了一个比较好的参考文档 其他内容待补充

JS进阶——深入对象

构造函数 封装是面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装。 前面我们学过的构造函数方法很好用,但是 存在浪费内存的问题 原型 目标:能够利用原型对象实现方法共享 构造函数通过原型分配的函数是所有对象所…

linux系统-----------搭建LNMP 架构

PHP(Hypertext Preprocessor 超文本预处理器)是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可…

resilience4j 2.0.0版本使用要求最低JDK17(使用踩坑记录)

文章目录 🔊博主介绍🥤本文内容📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

如何选择科技公司或者技术团队来开发软件项目呢

最近有客户问我们为什么同样软件项目不同公司报价和工期差异很大,我们给他解释好久才讲清楚,今天整理一下打算写一篇文章来总结一下,有需要开发朋友可以参考,我们下次遇到客户也可以直接转发文章给客户自己看。 我们根据我们自己报…

vue项目中使用antv X6新手教程,附demo案例讲解(可拖拽流程图、网络拓扑图)

前言: 之前分别做了vue2和vue3项目里的网络拓扑图功能,发现对antv X6的讲解博客比较少,最近终于得闲码一篇了! 需求: 用户可以自己拖拽节点,节点之间可以随意连线,保存拓扑图数据后传给后端&…

TensorFlow 使用 Rust 指南

一、概述 TensorFlow是由 Google Brain 团队开发的强大的开源机器学习框架,已成为人工智能的基石。虽然传统上与 Python 等语言相关,但 Rust(一种因其性能和安全性而受到重视的系统编程语言)的出现为 TensorFlow 爱好者开辟了新的…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

定制开发一款家政小程序,应知应会

引言 在这个快节奏的现代生活中,人们对高效、便捷的家政服务的需求日益增加。随着社会结构的变化和职业生活的繁忙,许多家庭面临着时间不足、精力不济的挑战。在这种情况下,家政服务成为解决问题的有效途径。然而,传统的家政服务…

iMazing3安全吗?好不好用?值不值得下载

一、安全性 iMazing在设计和开发过程中,始终把用户数据的安全性放在首位。它采用了多种先进的安全技术来确保用户数据在传输、备份和存储过程中的安全。 iMazing3Mac-最新绿色安装包下载如下: https://wm.makeding.com/iclk/?zoneid49816 iMazing3Wi…

ubuntu2204部署hbase2.3.7

开启root 修改root用户的密码 sudo passwd rootSSH放行 sudo sed -i s/^#\?PermitRootLogin.*/PermitRootLogin yes/g /etc/ssh/sshd_config; sudo sed -i s/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g /etc/ssh/sshd_config;重启服务 sudo service ssh…

IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知

一、背景 兔年末投了一篇TIE,手稿初次提交的注意事项也整理成了博客IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知,获得了许多点赞和收藏。最近也收到了审稿结果,给的意见是大修major revision,总之只要不…

day01-HTML-CSS

一、Web 开发 1. 什么是 Web ? Web:全球广域网,也称为万维网(www,World Wide Web),能够通过浏览器访问的 网站。 2. Web 网站的开发模式 3. Web 标准 Web 标准也称为网页标准,由一系列的标准组成&#xff…

【React 报错】—Remove untracked files, stash or commit any changes, and try again.

【React 报错】—Remove untracked files, stash or commit any changes, and try again. 在react项目中通过.less文件进行样式定义,先暴露webpack配置文件,执行命令:yarn eject 或 npm run eject,报错如下: 原因是因…

ZDH-大数据采集-支持KETTLE任务

目录 目录 项目源码 预览地址 支持KETTLE介绍 新增KETTLE任务 配置调度KETTLE 重要说明 感谢支持 项目源码 预览地址 支持KETTLE介绍 新增KETTLE任务 配置调度KETTLE 重要说明 项目源码 zdh_web:GitHub - zhaoyachao/zdh_web: 大数据采集,抽取平台 预览地址 后…

cRIO9040中NI9871模块的测试

硬件准备 CompactRIO9040NI9871直流电源(可调)网线RJ50转DB9线鸣志STF03-R驱动器和步进电机 软件安装 参考:cRIO9040中NI9381模块的测试 此外,需安装NI-Serial 9870和9871扫描引擎支持 打开NI Measurement&Automa…

字节面试问题

实现三列布局的方法 第一种&#xff1a;可以使用浮动margin 第二种&#xff1a;浮动BFC <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

向日葵、Todesk、teamviewer等工具远程连接电脑时第三方应用显示白屏

问题描述&#xff1a;用向日葵远程等桌面时&#xff0c;当把显示器断电或者就没有显示器时或者笔记本盖子合住时&#xff0c;第三方软件显示白屏或显示不出来的问题。 原因&#xff1a;某些显卡在断开屏幕时自动降为低功耗模式。 解决 1、下载工具 https://www.amyuni.com/d…
最新文章