【数据分析基础】实验三 文件操作、数组与矩阵运算

一.实验目的

  1. 掌握上下文管理语句with的使用方法。
  2. 掌握文本文件的操作方法。
  3. 了解os、os.path模块的使用。
  4. 掌握扩展库Python-docx、openpyxl的安装与操作word、Excel文件内容的方法。
  5. 熟练掌握numpy数组相关运算和简单应用。
  6. 熟练使用numpy创建矩阵,熟悉常用的矩阵运算。

二、实验内容

遍历并输出文本文件的所有行内容。

(1)程序代码:

with open('the_little_prince.txt') as fp:for line in fp: # 文件对象可以直接迭代print(line)

(2)运行结果(截图):

假设文件data.txt中有若干整数,所有整数之间使用英文逗号分隔,编写程序读取所有整数,将其按升序排序后再写入文本文件data_asc.txt中

参考代码:

(1)程序代码:

with open('data.txt', 'r') as fp:data = fp.readlines()
data = [line.strip() for line in data]  # 删除每行两侧的空白字符
data = ','.join(data)  # 合并所有行
data = data.split(',')  # 分隔得到所有数字字符串
data = [int(item) for item in data]  # 将数字字符串列表转换为整数列表
data.sort()  # 对整数列表进行升序排序
data = ','.join(map(str, data))  # 将排序后的整数列表转换为字符串,准备写入文件
with open('data_asc.txt', 'w') as fp:  # 打开文件data_asc.txt并将排序后的字符串写入fp.write(data)

(2)data.txt(截图):

(3)Data_asc.txt(截图):

编写程序,递归删除指定文件夹中指定类型(.tmp、.log、.obj)的文件和大小为0的文件。

参考代码:

(请注意:以上示例代码中,主程序调用函数删除指定文件时,指定的目录是‘D:\我的桌面\test’,需要在运行程序前先建立该目录,并在该目录下建立一些相关的文件。该程序功能涉及到文件的删除,所以指定测试的目录要谨慎!)

(1)程序代码:

from os.path import isdir, join, splitext
from os import remove, listdir, chmod, stat
file_types = ('.tmp', '.log', '.obj')  # 指定要删除的文件类型
def delete_certain_files(directory):if not isdir(directory):returnfor filename in listdir(directory):temp = join(directory, filename)# 检查是否为目录,如果是,则递归调用if isdir(temp):delete_certain_files(temp)# 检查文件扩展名,并且检查文件大小是否为0elif splitext(temp)[1] in file_types or stat(temp).st_size == 0:try:os.chmod(temp, 0o777)  # 修改文件属性,获取删除权限remove(temp)  # 删除文件print(f"{temp} Deleted.")except Exception as e:print(f"Error deleting file {temp}: {e}")
# 指定要删除文件的目录
delete_certain_files(r'C:\Users\A\Desktop\test')

(2)运行结果(截图):

(3)运行前后文件夹概览:

   

数组的创建与运算

(1)程序代码和运行结果:

矩阵的创建与运算。

(1)程序代码和运行结果(截图):

三、实验任务

学习教材第5、6章内容,根据实验内容练习相关编程知识。

独立完成如下编程任务并提交实验报告。(报告撰写要求详见模板文档)

假设文件data.txt中有若干整数,所有整数之间使用英文逗号分隔,编写程序读取每一行的整数,将每行数据按降序序排序后,按行保存到新文件data_desc.txt中。

(1)程序代码:

data = fp.readlines()data = [line.strip() for line in data]  # 删除每行两侧的空白字符
data = ','.join(data)  # 合并所有行
data = data.split(',')  # 分隔得到所有数字字符串
data = [int(item) for item in data]  # 将数字字符串列表转换为整数列表
data.sort(reverse=True)  # 对整数列表进行降序排序
data = ','.join(map(str, data))  # 将排序后的整数列表转换为字符串,准备写入文件
with open('data_asc.txt', 'w') as fp:  # 打开文件data_asc.txt并将排序后的字符串写入fp.write(data)

(2)data.txt(截图):

(3)Data_asc.txt(截图):


超市营业额.xslx

已知有文件“超市营业额.xslx”中记录了某超市2019年3月1日至3日各个员工在不同时段、不同柜台的销售额,部分数据如下图:

编写程序,读取该文件中的数据,并统计每个员工的销售总额、每个时间段的销售总额、每个柜台的销售总额。

(1)程序代码:

import pandas as pd
# 读取Excel文件
df = pd.read_excel('超市营业额.xlsx', engine='openpyxl')
# 将日期和时段列转换为字符串,以便于后续处理
df['日期'] = df['日期'].astype(str)
df['时段'] = df['时段'].astype(str)
# 统计每个员工的销售总额
total_by_employee = df.groupby('工号')['交易额'].sum()
# 统计每个时间段的销售总额
total_by_time = df.groupby('时段')['交易额'].sum()
# 统计每个柜台的销售总额
total_by_counter = df.groupby('柜台')['交易额'].sum()
# 输出结果
print("每个员工的销售总额:")
print(total_by_employee)
print("\n每个时间段的销售总额:")
print(total_by_time)
print("\n每个柜台的销售总额:")
print(total_by_counter)

(2)运行结果(截图):

编写函数Search(pathname,check_str) 实现检查指定文件夹及其子文件夹中的文件内容包含指定字符串check_str的.docx、.xlsx文档名称并存入元组,返回该元组。编写主程序,接收输入:文件夹名和要查找的字符串,调用函数Search(pathname,check_str),打印输出返回的结果

(1)程序代码:

import os
def Search(pathname, check_str):# 初始化一个元组,用于存储匹配的文件路径matching_files = ()# 遍历指定的文件夹及其子文件夹for root, dirs, files in os.walk(pathname):for file in files:# 检查文件扩展名是否为 .docx 或 .xlsx,并且文件名是否包含指定的字符串if file.lower().endswith(('.docx', '.xlsx')) and check_str in file:# 将文件的完整路径添加到元组中matching_files += (os.path.join(root, file),)# 返回匹配到的所有文件路径return matching_files
def main():# 从用户那里获取文件夹路径和要查找的字符串pathname = input("请输入文件夹路径:")check_str = input("请输入要查找的字符串:")# 调用 Search 函数并获取结果result = Search(pathname, check_str)# 打印结果if result:print("找到的文件:")for file in result:print(file)else:print("没有找到包含指定字符串的文件。")
if __name__ == "__main__":main()

(2)运行结果(截图):

实验总结:

知识点小结:

我掌握了使用with语句进行上下文管理,这是一种优雅且安全的方法来处理文件操作。

我学会了如何使用Python标准库中的os和os.path模块来操作文件和目录。

我了解了如何安装并使用扩展库python-docx和openpyxl来处理Word和Excel文件。

我熟练掌握了numpy库的基本使用,包括数组的创建、运算以及矩阵的生成和运算。

实验体会:

通过实践,我体会到了Python在数据处理方面的强大功能。特别是在处理Excel和Word文档时,合适的库可以极大地提高工作效率。我也认识到了代码的可读性和维护性的重要性,这在我编写和重构代码时被特别关注。

未解决的问题:

在实验过程中,我遇到了一些挑战,尤其是在处理复杂的文件操作和数组运算时。有时,我需要花费额外的时间去理解错误信息并找到解决方案。

改进的方法:

继续深入学习Python的高级特性和第三方库,以扩展我的技术栈。

学习更多关于代码优化和性能提升的技巧,的技术文档和源代码,以获得更深入的理解。

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

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

相关文章

新技术前沿-2024-构建个人知识库和小语言模型

OllamaWebUIAnythingLLM,构建安全可靠的个人/企业知识库 1 技术路线一 1.1 搭建本地大模型Ollama 1.2 搭建用户界面open WebUI 使用Docker Desktop Open-webui。它可以快速基于Ollama构筑本地UI。 如果没有科学上网,很可能会拉不动,可以试…

linux网络服务“PXE网络批量装机和Kickstart全自动化安装”

PXE网络批量装机 pxe自动装机: 服务端和客户端 pxe c/s 模式:允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。 无人值守 :安装选项不需要人为干预&#xf…

FlexJavaFramwork

FlexJavaFramwork架构

【高校科研前沿】广西大学博士生冯德东为一作在Habitat Int发文:区域乡村性与贫困治理变化的时空格局及相关效应——以滇桂黔石漠化地区为例

1.文章简介 论文名称:Spatio-temporal patterns and correlation effects of regional rurality and poverty governance change: A case study of the rocky desertification area of Yunnan-Guangxi-Guizhou, China(区域乡村性与贫困治理变化的时空格…

从零开始搭建Electron项目(二)之例程解析

本专栏,前面学习了怎么下载例程并运行。 这里解析例程的构成 从零开始搭建Electron项目之运行例程-CSDN博客文章浏览阅读22次。最好的学习方式就是:给一段能够运行的代码示例。本文给出了例程资源,以及运行的步骤。在国内开发electron有一点特…

【吊打面试官系列-Mysql面试题】MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ?

大家好,我是锋哥。今天分享关于 【MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ?】面试题,希望对大家有帮助; MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么 ? 以下是 MySQL_fetch_array 和 MySQL…

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

【Python】成功解决SyntaxError: invalid syntax

【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&am…

探索OrangePi AIpro:单板计算机的深度体验之旅

准备阶段:环境与资料 在开始我们的探索之旅前,确保您已准备好以下装备: OrangePi AIpro:我们的主角,一台功能强大的单板计算机。Windows 10笔记本电脑:作为我们的辅助工具,用于管理和测试。路…

SSM民宿在线预订平台的设计与实现-计算机毕业设计源码44449

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对民宿在线预订平台等问题,对民宿…

力扣74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 示…

1.nginx介绍

介绍 是一个高性能的http和反向代理服务器。 特点 占用内存少,并发能力强。 nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。 基…

游戏服务器工程实践一:百万级同时在线的全区全服游戏

我应该有资格写这篇文章,因为亲手设计过可以支撑百万级同时在线的全区全服类型的游戏服务器架构。 若干年前我在某公司任职时,参与研发过一款休闲类型的游戏,由 penguin 厂独代。研发的时候,p 厂要求我们的游戏服务器要能支撑百万…

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…

MySQL事务,视图,用户管理学习笔记【事务概念 | 事务隔离级别 | 设置级别 | 视图 | 用户管理】

博客主页:花果山~程序猿-CSDN博客 文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,事务初…

面试杂谈之clickhouse

clickhouse 之前定时任务读取binlog 批量同步clickhouse kafka 批量给clickhouse灌数据 clickhouse列式数据库,运行时创建库表,加载数据查询数据压缩,磁盘存储,向量化引擎,利用CPU多核并行处理缺少完整的update/del…

【SQL】牛客网SQL非技术入门40道代码|练习记录

跟着刷题:是橘长不是局长哦_哔哩哔哩_bilibili 6查询学校是北大的学生信息 select device_id, university from user_profile where university 北京大学 7查找年龄大于24岁的用户信息 select device_id, gender, age, university from user_profile where age…

开源低代码平台技术为数字化转型赋能!

实现数字化转型升级是很多企业未来的发展趋势,也是企业获得更多发展商机的途径。如何进行数字化转型?如何实现流程化办公?这些都是摆在客户面前的实际问题,借助于开源低代码平台技术的优势特点,可以轻松助力企业降低开…

设计模式-装饰器模式(结构型)

装饰器模式 装饰器模式是一种结构模式,通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能,是现有类的包装。 图解 角色 抽象组件:定义组件的抽象方法具体组件:实现组件的抽象方法抽象装饰器:实现…

沐风老师3DMAX一键多孔结构建模插件Porous使用方法

​3DMAX一键多孔结构建模插件Porous使用教程 3dMax是大家熟知的3D建模软件之一,其功能非常的强大,在科研绘图领域有着非常广泛的应用,但是由于科研绘图的图形(模型)一般都属于异形结构,手工绘制建模&#x…