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

news2024/10/8 22:13:01

一.实验目的

  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):
        return
    for filename in listdir(directory):
        temp = join(directory, filename)

        # 检查是否为目录,如果是,则递归调用
        if isdir(temp):
            delete_certain_files(temp)
            # 检查文件扩展名,并且检查文件大小是否为0
        elif 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.coloradmin.cn/o/1807921.html

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

相关文章

matlab演示地月碰撞

代码 function EarthMoonCollisionSimulation()% 初始化参数earth_radius 6371; % 地球半径,单位:公里moon_radius 1737; % 月球半径,单位:公里distance 384400; % 地月距离,单位:公里collision_tim…

【JAVASE】java语法(成员变量与局部变量的区别、赋值运算符中的易错点)

一:成员变量与局部变量的区别 区别 成员变量 局部变量 类中位置不同 …

高通Android开关机动画踩坑简单记录

1、下面报错有可能是selinux的原因 Read-only file system 2、接着push 动画 reboot之后抓取logcat出现 ,以下这个报错。看着像是压缩格式有问题。 3、于是重新压缩一下报错没有再出现 ,压缩格式默认是标准,这里必须要改成存储格式哈 4、修改…

python-数字黑洞

[题目描述] 给定一个三位数,要求各位不能相同。例如,352是符合要求的,112是不符合要求的。将这个三位数的三个数字重新排列,得到的最大的数,减去得到的最小的数,形成一个新的三位数。对这个新的三位数可以重…

解决windows11开机xbox自启动

1、同时按键盘“ctrlaltdelete”键,在弹出页面中选择任务管理器; 2、点击启动应用 3、找到软件Xbox App Services,选择“已启用”点击右键,点击禁用;

新书推荐:2.3 消息机制

Windows程序的消息机制是指在Windows操作系统下,应用程序与操作系统之间的一种通信方式。通过消息机制,应用程序可以接收来自操作系统的各种事件和请求,以便做出相应的响应和处理。 在Windows程序中,消息机制的实现是基于消息队列…

OpenGauss数据库-6.表空间管理

第1关:创建表空间 gsql -d postgres -U gaussdb -W passwd123123 CREATE TABLESPACE fastspace OWNER omm relative location tablespace/tablespace_1; 第2关:修改表空间 gsql -d postgres -U gaussdb -W passwd123123 ALTER TABLESPACE fastspace R…

Gh-ost让MySQL在线表结构变更不再是难题

Gh-ost:无缝迁移,效率与安全并行- 精选真开源,释放新价值。 概览 gh-ost是由GitHub团队精心打造的在线MySQL表结构迁移工具,它以一种无需触发器的方式,实现了对数据库表结构变更的在线操作。gh-ost的设计初衷是解决现…

matlab使用教程(95)—显示地理数据

下面的示例说明了多种表示地球地貌的方法。此示例中的数据取自美国商务部海洋及大气管理局 (NOAA) 国家地理数据中心,数据通告编号为 88-MGG-02。 1.关于地貌数据 数据文件 topo.mat 包含地貌数据。topo 是海拔数据,topomap1 是海拔的颜色图。 load t…

【HarmonyOS】鸿蒙应用模块化实现

【HarmonyOS】鸿蒙应用模块化实现 一、Module的概念 Module是HarmonyOS应用的基本功能单元,包含了源代码、资源文件、第三方库及应用清单文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会包含一个或多个Module,因此&am…

【力扣高频题】003.无重复字符的最长子串

前段时间和小米的某面试官聊天。因为我一直在做 算法文章 的更新,就多聊了几句算法方面的知识。 并且在聊天过程中获得了一个“重要情报”:只要他来面试,基本上每次的算法题,都会去考察关于 子串和子序列 的问题。 的确&#xf…

【第14章】SpringBoot实战篇之多环境配置

文章目录 前言一、通用配置文件1. 定义2. 使用2.1 application.yml2.2 启动类 3. 测试 二、多环境配置文件1.定义1.1 application-local.yml1.2 application-dev.yml1.3 application-test.yml1.4 application-prod.yml 2.使用2.1 application.yml2.2 启动类 3.测试 三、多环境配…

OPPO高级项目经理曹帆受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 OPPO互联网服务系统内容生态中心高级互联网项目经理曹帆先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“加、减、乘、除——激活项目团队效能”。大会将于6月29-30日在北京举办,敬请关注! 议…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(五)---- 操作系统的组织结构(OS design)

系列文章目录 操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建&#x…

[spring] Spring MVC Thymeleaf(上)

[spring] Spring MVC & Thymeleaf(上) 本章内容主要过一下简单的 Spring MVC 的案例 简单来说,spring mvc 就是比较传统的网页开发流程,目前 boot 是可以比较轻松的配置 thymeleaf——毕竟 spring boot 内置对 thymeleaf 的…

Docker与Docker-Compose详解

1、Docker是什么? 在计算机中,虚拟化(英语: Virtualization) 是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍&…

【深度学习】—— 神经网络介绍

神经网络介绍 本系列主要是吴恩达深度学习系列视频的笔记,传送门:https://www.coursera.org/deeplearning-ai 目录 神经网络介绍神经网络的应用深度学习兴起的原因 神经网络,全称人工神经网络(Artificial Neural Network&#xf…

c# 下 ScintillaNET 显示XML信息并折叠节点

winform下显示XML信息(非WPF) 之前使用的是FastColoredTextBox,github地址如下: https://github.com/PavelTorgashov/FastColoredTextBox 但是有个问题,它支持中文,wordwraptrue,自动换行时&…

[大模型]Gemma-2B-Instruct FastApi 部署调用

环境准备 在 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1。 接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换源加速下载…

【IoT NTN】3GPP R18中关于各类IoT设备在NTN中的增强和扩展

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…