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

一.实验目的

  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的高级特性和第三方库,以扩展我的技术栈。

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

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

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

相关文章

Python | Leetcode Python题解之第135题分发糖果

题目: 题解: class Solution:def candy(self, ratings: List[int]) -> int:n len(ratings)ret 1inc, dec, pre 1, 0, 1for i in range(1, n):if ratings[i] > ratings[i - 1]:dec 0pre (1 if ratings[i] ratings[i - 1] else pre 1)ret p…

27-LINUX--I/O复用-poll

一.poll概述 poll是一个多路复用的I/O模型&#xff0c;一个进程监视多个文件描述符&#xff0c;当文件描述符就绪时&#xff0c;poll返回可读并做相应处理。 1.poll的模型 #include <poll.h>struct pollfd {int fd; //文件描述符short events; //事件类型 s…

codesys【CAN总线】

1下载设备描述文件&#xff1a; 必须下载设备描述文件&#xff0c;要不然编程软件无法正确组态。 根据实际设备【品牌】去官网搜索下载。 以 DMA882-CAN 为例 CAN的设备描述文件是【.eds】的扩展名 安装设备描述文件。 2添加CAN总线&#xff1a; 1添加【CAN总线】&#xff1a…

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先&#xff0c;我们拉一份最新的源代码&#xff08;笔者是2024.6.6日拉取的&#xff09;&#xff1a; fetch --nohistory chromium 源码预处理 如果运行build&#xff0c;会生成许多生成的代码&#xff0c;因此我们不运行build。 然后&#xff0c;把干扰后续分析…

Map深度学习

Map Map是一个键值对的集合&#xff0c;和object类似&#xff0c;Map作为构造函数&#xff0c;可以通过全局对象获取到。需要通过new操作创建实例对象&#xff0c;直接调用会报错。Map构造函数接受一个iterable类型的函数&#xff0c;用来初始化Map。 var m new Map([[1, &qu…

centos7安装字体

1.安装命令 yum install fontconfig #字体库命令 yum install mkfontscale #更新字体命令2.安装字体&#xff08;注意权限问题&#xff09; 进入目录 /usr/share/fonts &#xff0c;该目录是 centos7 字体库的默认安装目录。在该目录下创建一个文件夹 ekp &#xff08;名字…

理解我的积木编程思想

1 学习教程&#xff0c;至少7139手册2 编程实践&#xff0c;遇到实际问题后&#xff0c;在技术资料中查找关键词3 选择适合的条目找到代 码。修正&#xff0c;组合。

封装了一个简单理解的iOS竖直文字轮播

效果图 原理 就是持有两个视图&#xff0c;并且两个视图同时改变origin.y 动画结束之后&#xff0c;判断哪个视图是在上面并且看不到的&#xff0c; 则将该视图移动到底部&#xff0c;并且该视图展示下一跳内容 在开始下一轮动画 代码 - (void)startAnimationWithDuration:(…

若依项目部署(Linux2.0)

解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量&#xff1a; vim /etc/profile export JAVA_HOME/root/soft/jdk1.8.0_151 export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/bin:$PATH 设置环境…

WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程

说起来有关 WordPress 缓存插件明月已经发表过不少文章了,但有关 W3 Total Cache Pro 这个 WordPress 高级缓存插件除了早期【网站缓存插件 W3 Total Cache,适合自己的才是最好的!】一文后就很少再提及了,最近因为明月另一个网站【玉满斋】因为某些性能上的需要准备更换缓存…

MySQL基础---库的操作和表的操作(配着自己的实操图,简单易上手)

绪论​ 勿问成功的秘诀为何&#xff0c;且尽全力做您应该做的事吧。–美华纳&#xff1b;本章是MySQL的第二章&#xff0c;本章主要写道MySQL中库和表的增删查改以及对库和表的备份处理&#xff0c;本章是基于上一章所写若没安装mysql可以查看Linux下搭建mysql软件及登录和基本…

解密Spring Boot:深入理解条件装配与条件注解

文章目录 一、条件装配概述1.1 条件装配的基本原理1.2 条件装配的作用 二、常用注解2.1 ConditionalOnClass2.2 ConditionalOnBean2.3 ConditionalOnProperty2.4 ConditionalOnExpression2.5 ConditionalOnMissingBean 三、条件装配的实现原理四、实际案例 一、条件装配概述 1…

办公风云颜值背后的职场正能量

办公风云&#xff1a;颜值背后的职场正能量当我们提到职场&#xff0c;脑海中浮现的往往是严肃的面孔、忙碌的身影和堆积如山的文件。但在这个看似单调的舞台上&#xff0c;总有一些人&#xff0c;用他们的颜值和才华&#xff0c;为我们上演了一场场别开生面的“大戏”。今天&a…

68. UE5 RPG 处理多个角色后续bug

我们现在已经有了四个敌人角色&#xff0c;接下来&#xff0c;处理一下在战斗中遇到的问题。 处理角色死亡后还会攻击的问题 因为我们有角色溶解的效果&#xff0c;角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内&#xff0c;角色其实还是会攻击。主要时因为AI行为树…

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

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

NetSuite精益实施 之 系统切换作业标准化

这个题目为近日所思&#xff0c;一直没有落笔。今天是端午假日&#xff0c;得空卸货。 标准化是精益实施的三个基础之一&#xff0c;在我们的项目实践中没有须臾忘记。在此我们不再赘述标准化为啥这么重要&#xff0c;更多来分享如何标准化。 在项目实施的各阶段中&#xff0…

汇编语言作业(六)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、实验总结 一、实验目的 掌握加减法运算指令对各状态标志位的影响及测试方法掌握汇编语言长整数的加法的操作方法 二、实验内容 对于以下几组数&#xff0c; 087H和034H 0C2H和5FH 0F3H和0F3H&am…

数据中心智能化运维发展研究报告(2023)解读

数据中心智能化运维发展研究报告&#xff08;2023&#xff09;解读 《数据中心智能化运维发展研究报告&#xff08;2023&#xff09;》探讨了数据中心智能化运维的概念、核心内容、实际应用和发展建议。报告指出&#xff0c;通过人工智能、大数据等新一代信息技术的深度应用&a…

代码随想录 -数组

1.二分算法 边界开闭 左闭右闭 原则 这里的&#xff0c;middle不是要找的值。那么nums【middle】>tager 我们要更新右边界为middle-1 &#xff08;因为要左区间 所以更新右边界&#xff09; 在这里插入图片描述 class Solution { public:int search(vector<int>&a…

探索基于订阅式的电视App:Android TV 端强大的开源视频播放器

探索基于订阅式的电视App&#xff1a;Android TV 端强大的开源视频播放器 在智能电视和流媒体日益普及的今天&#xff0c;一款强大的视频播放器是家庭娱乐的重要组成部分。正是这样一款为Android TV设计的开源视频播放器。本文将深入探讨电视盒子OSC的技术特点、使用方法以及其…