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

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

一、实验目的与要求

(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://pan.quark.cn/s/f1bfbe457955

提取码:WhgA

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

第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+"(读写)等。在选择文件模式时,需要根据具体的需求来决定使用哪种模式,以确保操作的正确性和安全性。在文件读写操作中,尤其是处理文本文件时,需要注意文件的编码格式。在打开文件时可以指定编码方式,以便正确地读取和写入文件内容。文件读写过程中,文件指针的位置是非常重要的。在读取文件内容或者进行写入操作时,需要注意文件指针的位置,以确保读写操作的准确性。


目录
相关文章
|
21天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
191 102
|
21天前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
194 104
|
21天前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
185 103
|
21天前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
130 82
|
21天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
31 0
|
29天前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
106 0
|
2月前
|
安全 测试技术 数据处理
Python列表推导式进阶:从简洁代码到高效编程的10个核心技巧
列表推导式是Python中高效的数据处理工具,能将多行循环代码压缩为一行,提升代码可读性与执行效率。本文详解其基础语法、嵌套循环、条件表达式、函数融合、性能优化等进阶技巧,并结合实战案例与边界条件处理,帮助开发者写出更优雅、高效的Python代码。
123 0
|
9月前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
228 8
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
179 1
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
319 14

热门文章

最新文章

推荐镜像

更多