处理csv、bmp等常用数据分析操作--python

news2025/1/11 0:05:18

      请先看思维导图,看是否包含你所需要的东西,如果没有,就可以划走了,免得浪费时间,谢谢

 

条条大路通罗马,我只是介绍了我掌握的这一条,不喜勿喷,谢谢。


目录

一、创建文件夹(多层)

1、创建多层文件夹(包含子文件夹)

2、查找多层文件夹中内容

二、读写CSV

1、写csv文件

 2、读csv文件

三、读写bmp图

1、读取csv,保存为bmp图

 2、读取bmp图

四、excel中插入数据及图片

五、综合应用(可直接运行)


一、创建文件夹(多层)

1、创建多层文件夹(包含子文件夹)

import os

# 新建多层文件夹
def mkdir(path):
    if not os.path.exists(path):       # 判断是否存在此路径
        os.makedirs(path)          # 创建此路径
        print("完成新建")

# 主函数
if __name__ == "__main__":
    root_path = os.getcwd()  # 获取此py文件的路径
    print(root_path)
    new_folder_path = os.path.join(root_path, "new_folder", "1")  # os.path.join的作用,相当于给root_path, "new_folder", "1"添加"\\"
    mkdir(new_folder_path)

运行结果:

"E:\study software\python3.7\python.exe" D:/test/new_folder.py
D:\test
完成新建

Process finished with exit code 0

新建多层文件夹效果:

2、查找多层文件夹中内容

在上述新建文件夹中,手动新建一个空的txt文件。

 查找到多层文件夹中的txt文件:

import os

# 主函数
if __name__ == "__main__":
    root_path = os.getcwd()  # 获取此py文件的路径
    for root, dirs, files in os.walk(root_path):   # os.walk类似于二叉树查找
        for file in files:  # 判断是否找到最小单位文件,files是文件名列表
            if ".txt" in file:
                print(file)
                print("找到txt文件")
                print(root)  # txt文件的文件夹路径

运行结果: 

"E:\study software\python3.7\python.exe" D:/test/find_txt.py
test.txt
找到txt文件
D:\test\new_folder\1

Process finished with exit code 0

二、读写CSV

1、写csv文件

利用numpy新建矩阵数据,并保存至csv中。

import csv
import numpy as np
import random  # 生成随机数的库
import os

# 将data写入对应路径的csv中
def write_csv(data, csvpath):
    with open(csvpath, "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerows(data)
    f.close()
    print("完成data保存为csv")


# 主函数
if __name__ == "__main__":
    root_path = os.getcwd()
    data1 = np.ones([100, 30])  # 构成100*30的矩阵
    # 数据中叠加噪声
    for i in range(100):
        for j in range(30):
            data1[i, j] += random.randint(1, 254)
    csvpath1 = os.path.join(root_path, "test.csv")  # csv保存的路径
    write_csv(data1, csvpath1)

运行后上述代码后,得到以下test.csv。 

 2、读csv文件

import numpy as np
import pandas as pd

row_num = 100
col_num = 30

# 读取csv内容至baseData
def read_csv(csvpath):
    baseData = pd.read_csv(open(csvpath), header=None, encoding="gdk")  # 此读取方式,可以读取包含中文路径的csv文件
    baseData = np.array(baseData.values)
    baseData = baseData[:row_num, :col_num]
    return baseData


# 主函数
if __name__ == "__main__":
    csvpath = r"\\?\D:\test\test.csv"  # csv存放的路径,加上"\\?\",可以突破python路径长度的限制,方便读取更深层路径下文件
    data = read_csv(csvpath)
    print(data)

运行结果:

"E:\study software\python3.7\python.exe" D:/test/read_csv.py
[[  5. 236. 129. ...  72. 166. 201.]
 [ 12.  12. 147. ... 212.  57.  85.]
 [ 16. 114. 194. ... 105. 117. 200.]
 ...
 [ 96.  25. 251. ... 201.  16.  85.]
 [169. 206. 113. ...  55.  67.  87.]
 [225. 236. 188. ... 205. 173. 155.]]

Process finished with exit code 0

三、读写bmp图

1、读取csv,保存为bmp图

import numpy as np
import pandas as pd
from PIL import Image # 这个库全称是Pillow

row_num = 100
col_num = 30

# 读取csv内容至baseData
def read_csv(csvpath):
    baseData = pd.read_csv(open(csvpath), header=None, encoding="gdk")  # 此读取方式,可以读取包含中文路径的csv文件
    baseData = np.array(baseData.values)
    baseData = baseData[:row_num, :col_num]
    return baseData


# 将矩阵数据保存为bmp灰度图
def write_bmp(data, bmppath):
    data1 = np.array(data, dtype="uint8")  # 转换为无符号8bit,0~255,灰度图
    data1 = Image.fromarray(data1)
    # 第一个参数为存储地址和名称,第二个为存储的图片类型
    data1.save(bmppath, "bmp")

# 主函数
if __name__ == "__main__":
    csvpath = r"\\?\D:\test\test.csv"  # csv存放的路径,加上"\\?\",可以突破python路径长度的限制,方便读取更深层路径下文件
    data = read_csv(csvpath)
    bmp_path = r"\\?\D:\test\test.bmp"  # bmp存储的路径及名称
    write_bmp(data, bmp_path)

存储的图片,如下所示:(噪点图)

 2、读取bmp图

import numpy as np
from PIL import Image

# 读取csv内容至baseData
def read_bmp(bmp_path):
    pic = open(bmp_path, "rb")  # 以这种方式读bmp,方便读了之后关闭文件
    image = Image.open(pic)
    image_data = np.array(image)
    data1 = image_data.astype("int16")
    pic.close()
    return data1


# 主函数
if __name__ == "__main__":
    bmp_path = r"\\?\D:\test\test.bmp"  # bmp的路径及名称
    data = read_bmp(bmp_path)
    print(data)

运行结果:

"E:\study software\python3.7\python.exe" D:/test/read_bmp.py
[[  5 236 129 ...  72 166 201]
 [ 12  12 147 ... 212  57  85]
 [ 16 114 194 ... 105 117 200]
 ...
 [ 96  25 251 ... 201  16  85]
 [169 206 113 ...  55  67  87]
 [225 236 188 ... 205 173 155]]

Process finished with exit code 0

四、excel中插入数据及图片

1、先读取csv数据,然后保存为图片,excel中插入数据std结果,及保存的图片,具体代码如下所示:

import numpy as np
import pandas as pd
from PIL import Image
import xlsxwriter
import os

row_num = 100
col_num = 30

# 读取csv内容至baseData
def read_csv(csvpath):
    baseData = pd.read_csv(open(csvpath), header=None, encoding="gdk")  # 此读取方式,可以读取包含中文路径的csv文件
    baseData = np.array(baseData.values)
    baseData = baseData[:row_num, :col_num]
    return baseData


# 将矩阵数据保存为bmp灰度图
def write_bmp(data, bmppath):
    data1 = np.array(data, dtype="uint8")  # 转换为无符号8bit,0~255,灰度图
    data1 = Image.fromarray(data1)
    # 第一个参数为存储地址和名称,第二个为存储的图片类型
    data1.save(bmppath, "bmp")


# 主函数
if __name__ == "__main__":
    csvpath = r"\\?\D:\test\test.csv"  # csv存放的路径,加上"\\?\",可以突破python路径长度的限制,方便读取更深层路径下文件
    data = read_csv(csvpath)
    bmp_path = r"\\?\D:\test\test.bmp"  # bmp存储的路径及名称
    write_bmp(data, bmp_path)
    # excel操作相关
    root_path = os.getcwd()  # 获取当前py文件路径
    book = xlsxwriter.Workbook(os.path.join(root_path, "test.xlsx"))  # 指定excel存放位置
    sheet = book.add_worksheet("test_data")  # 新建一页sheet,方便后续操作
    headings = ["file_name", "data_std", "pic"]  # 表头信息
    sheet.write_row("A1", headings)  # 从A1开始写表头信息

    # 计算数据列std均值
    std_count = np.zeros([1, col_num])  # 用于存放每列std值
    for i in range(col_num):
        std_count[0, i] = np.std(data[:, i])
    std_mean = int(np.mean(std_count))  # 将最终结果转成整形
    sheet.write_number(1, 1, std_mean)  # 第1行,第一列写std_mean,之前的A1相当于是第(0,0)位置
    file_name = csvpath.split("\\")[-1]  # 字符串按照"\\"符号进行分割,[-1]表示取分割后最后一个字符串
    sheet.write_string(1, 0,  file_name)

    # excel插入图片
    sheet.insert_image(1, 2, bmp_path)  # excel的sheet页,第1行、第3列插入bmp_path路径下图片
    book.close()  # 关闭excel

2、运行之后,得到excel如下所示:

五、综合应用 

1、完整代码如下:(可直接运行)

注:需提前安装好库:numpy、pandas、Pillow、xlsxwriter

# 需提前安装好库:numpy、pandas、Pillow、xlsxwriter
import numpy as np
import pandas as pd
from PIL import Image
import xlsxwriter
import os
import time
import random
import csv


# 定义每帧数据大小
row_num = 100
col_num = 30


# 新建多层文件夹
def mkdir(path):
    if not os.path.exists(path):       # 判断是否存在此路径
        os.makedirs(path)          # 创建此路径
        print("完成新建")


# 读取csv内容至baseData
def read_csv(csvpath):
    baseData = pd.read_csv(open(csvpath), header=None, encoding="gdk")  # 此读取方式,可以读取包含中文路径的csv文件
    baseData = np.array(baseData.values)
    baseData = baseData[:row_num, :col_num]
    return baseData


# 将data写入对应路径的csv中
def write_csv(data, csvpath):
    with open(csvpath, "w", newline="") as f:
        writer = csv.writer(f)
        writer.writerows(data)
    f.close()
    print("完成data保存为csv")


# 将矩阵数据保存为bmp灰度图
def write_bmp(data, bmppath):
    data1 = np.array(data, dtype="uint8")  # 转换为无符号8bit,0~255,灰度图
    data1 = Image.fromarray(data1)
    # 第一个参数为存储地址和名称,第二个为存储的图片类型
    data1.save(bmppath, "bmp")


# 读取csv内容至baseData
def read_bmp(bmp_path):
    pic = open(bmp_path, "rb")  # 以这种方式读bmp,方便读了之后关闭文件
    image = Image.open(pic)
    image_data = np.array(image)
    data1 = image_data.astype("int16")
    pic.close()
    return data1


# 主函数
if __name__ == "__main__":
    current_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())  # 获取当前时间并以指定格式显示
    root_path = os.getcwd()  # 获取py文件路径
    # excel相关信息
    book = xlsxwriter.Workbook(os.path.join(root_path, "test.xlsx"))  # 指定excel存放位置
    sheet = book.add_worksheet("test_data")  # 新建一页sheet,方便后续操作
    headings = ["file_name", "data_std", "pic"]  # 表头信息
    sheet.write_row("A1", headings)  # 从A1开始写表头信息
    count_row = 0  # 计算excel行数
    # 1、新建csv数据
    save_csv = os.path.join(root_path, "test_folder", "save_csv", current_time)
    mkdir(save_csv)  # 创建多层文件夹
    for k in range(20):  # 得到20帧噪声数据 100*30
        data1 = np.ones([100, 30])  # 构成100*30的矩阵
        # 数据中叠加噪声
        for i in range(100):
            for j in range(30):
                data1[i, j] += random.randint(1, 254)
        print("test"+str(k)+".csv")
        csvpath1 = os.path.join(save_csv, "test"+str(k)+".csv")  # csv保存的路径
        write_csv(data1, csvpath1)
    # 2、从文件夹中获取csv文件,并绘图
    for root, dirs, files in os.walk(root_path):
        for file in files:
            if ".csv" not in file:
                continue
            else:
                csv_path = os.path.join(root, file)
                data = read_csv(csv_path)
                bmp_path = csv_path.replace(".csv", ".bmp")  # 替换后缀,得到bmp保存路径
                write_bmp(data, bmp_path)  # 保存图片
                # 计算数据列std均值
                std_count = np.zeros([1, col_num])  # 用于存放每列std值
                for i in range(col_num):
                    std_count[0, i] = np.std(data[:, i])
                std_mean = int(np.mean(std_count))  # 将最终结果转成整形
                # 3、插入统计数据及图片至excel中
                count_row += 1
                sheet.write_number((count_row-1)*6+1, 1, std_mean)  # 第1行,第一列写std_mean,之前的A1相当于是第(0,0)位置
                file_name = csv_path.split("\\")[-1]  # 字符串按照"\\"符号进行分割,[-1]表示取分割后最后一个字符串
                sheet.write_string((count_row-1)*6+1, 0, file_name)  # (count_row-1)*5 调整excel行间隔
                # excel插入图片
                sheet.insert_image((count_row-1)*6+1, 2, bmp_path)  # excel的sheet页,第1行、第3列插入bmp_path路径下图片
    book.close()  # 关闭excel

2、运行生成excel,效果如下所示:

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

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

相关文章

一行日志,让整个文件导出服务导出内容都为空..

输出一行日志&#xff0c;却让整个文件上传服务挂了...问题分析小结问题 直接上代码&#xff0c;看看有无眼尖的小伙伴发现问题&#xff1a; // 设置参数 MultiValueMap<String, Object> param new LinkedMultiValueMap<>(); FileSystemResource resource new …

log4cpp初入门

目录下载与安装log4cpp框架CategoryAppenderLayoutPriortyOutput功能日志级别⽇志格式化⽇志输出日志回滚日志配置文件下载与安装 https://sourceforge.net/projects/log4cpp/ tar xvf log4cpp-1.1.3.tar.gz cd log4cpp ./configure make make check make install ldconfig…

轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

目录 1、VSCode下载与安装 2、VSCode基础插件安装 3、SSH连接与配置 4、SSH免密登录 5、Pico编译 工欲善其事&#xff0c;必先利其器。之前的介绍的Pico流程都是通过命令行编译&#xff0c;没有进行更深入的介绍&#xff0c;本文将介绍Pico的VSCode-C语言开发环境搭建与配…

Rust WASM 与 JS 计算素数性能对比

前言 刚接触Rust wasm&#xff0c;请各看官高抬贵手。 简介 根据网上资料&#xff0c;使用 wasm-pack 搭配wasm-bindgen将Rust代码编译成 wasm。 搭好环境后&#xff0c;想对比一下rust-wasm与js的性能差距。 环境 OS: Deepin 20.7.1 apricotKernel: Linux 5.15.34CPU: Int…

LeetCode单周赛第320场 AcWing周赛第78场总结

1. LeetCode单周赛第320场 1.1 数组中不等三元组的数目 1.1.1 原题链接&#xff1a;力扣https://leetcode.cn/problems/number-of-unequal-triplets-in-array/ 1.1.2 解题思路&#xff1a; 暴力遍历咯。 1.1.3 代码&#xff1a; class Solution { public:int unequalTripl…

JAVA的学习心路历程之JDK基础入门(上)

任务需要&#xff0c;需要我学java调用linux下的动态库&#xff0c;于是搜寻java知识更新这篇。 从我上大学起我就听别人说JAVA&#xff0c;不不&#xff0c;应该是初中&#xff0c;那时候流行带键盘的智能手机&#xff0c;里面有好些个游戏都是JAVA写的&#xff0c;可见JAVA有…

【JavaWeb】HTML

HTML1 HTML概念1.1 超文本1.2 标记语言2 HTML的入门程序3 HTML语法规则4 使用idea创建StaticWeb工程5 HTML的各个标签的使用5.1标题标签5.2段落标签5.3换行标签5.4无序列表标签5.5超链接标签5.6图像标签5.7块标签6.使用表格标签展示数据6.1未合并单元格6.2合并单元格-合并列6.3…

套接字+网络套接字函数+客户端大小写程序

NAT映射 一般来说&#xff1a;源主机和目的主机都属于局域网&#xff0c;也就是ip地址可能相同 但是&#xff1a;路由器一般是公网ip,即整个网络环境可见 每一个路由器会维护一个NAT映射表 路由器的ip一般是固定的公网ip路由器与把与它相连的主机&#xff1a;私有ip端口号映射…

Java-多线程-ThreadPoolExecutor

前言 前面我们讲解线程的时候&#xff0c;讲到了使用Executors创建线程池&#xff0c;但是它里面所有方法可变的参数太少&#xff0c;不能很好的进行自定义设置&#xff0c;以及以后的扩展&#xff0c;更合理的使用cpu线程的操作&#xff0c;所以使用ThreadPoolExecutor创建线程…

SpringBoot集成webservice

前言 之前在工作中&#xff0c;有时候需要去对接第三方的医院&#xff0c;而很多医院的his系统用的都是老技术&#xff08;WebService&#xff09;。一直在对接webservice接口&#xff0c;却不知道webservice接口是怎么实现的&#xff0c;这一次&#xff0c;我们来一探究竟。 …

Android Compose Bloom 项目实战 (一) : 项目说明与配置

1. 项目介绍 Bloom是谷歌 AndroidDevChallenge (Android 开发挑战赛) 中的一期活动&#xff0c;目的是为了推广Compose&#xff0c;非常适合用来练手&#xff0c;通过这个项目&#xff0c;我们可以很好的入门Compose。本文介绍了如何从零开始&#xff0c;开发这个Compose项目。…

计算机系统结构期末复习

名词解释 程序访问局部性 时间局部性是指最近被访问过的数据很可能再次被访问 空间局部性是指最近被访问过的存储空间的附近空间可能会被访问 计算机体系结构 计算机体系结构是程序员所看到的计算机属性&#xff0c;即概念性结构与功能特性 窗口重叠技术 为了能更简单、更直接…

UE5笔记【五】操作细节——光源、光线参数配置、光照图修复

设置光线重载质量模式为预览&#xff1a;可以加快重构速度。 为了更快速高效的学习&#xff0c;直接查看别人已经建好的素材实例。 在EpicGames启动器中打开示例&#xff0c;找到这个照片级渲染。查看别人建好的效果图。 创建工程以UE5版本打开。进入查看。 观察Baked和碰撞测…

MySQL常用函数大全(面试篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。主要介绍了面试常问函数。 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返回x的绝对值 2、AVG(expression) 返回一个表达式的平均值&am…

Redis分布式锁

1. 什么是分布式锁 分布式锁指的是&#xff0c;所有服务中的所有线程都去获得同一把锁&#xff0c;但只有一个线程可以成功的获得锁&#xff0c;其他没有获得锁的线程必须全部等待&#xff0c;等到获得锁的线程释放掉锁之后获得了锁才能进行操作。 Redis官网中&#xff0c;set…

中加石墨再冲刺港交所上市:2022年初至今收入为零,陈东尧为CEO

11月18日&#xff0c;中加石墨控股股份有限公司&#xff08;下称“中加石墨”&#xff09;在港交所递交招股书&#xff0c;准备在港交所主板&#xff0c;宏信为独家保荐人。据贝多财经了解&#xff0c;这是中加石墨第二次递表&#xff0c;此前曾于2022年2月28日递交上市申请材料…

通过inode结构体取到次设备号,实现LED灯的亮灭

对Linux来说&#xff0c;设备驱动也是文件。驱动控制硬件的过程&#xff0c;实际上是对驱动文件的读写操作。 对内核来说&#xff0c;如何获取唯一的文件标识呢&#xff1f;当然是通过file结构体中的&#xff0c;inode结构体识别应用层打开的到底是哪一个设备文件。 实验操作及…

数据结构题目收录(二十)

1、含有n个非叶结点的m阶B树中至少包含&#xff08;&#xff09;个关键字。 A&#xff1a;n(m1)B&#xff1a;nC&#xff1a;n(┌\ulcorner┌m/2┐\urcorner┐-1)D&#xff1a;(n-1)(┌\ulcorner┌m/2┐\urcorner┐-1)1 解析 除根结点外&#xff0c;m阶B树中的每个非叶结点至…

mongodump工具安装及使用详解

MongoDB导入导出和备份的命令工具从4.4版本开始不再自动跟随数据库一起安装&#xff0c;而是需要自己手动安装。 官方网站下载链接&#xff1a;Download MongoDB Command Line Database Tools | MongoDB 将下载的压缩包通过工具上传到服务器或者虚拟机中某个路径下并解压&…

ZYNQ图像处理项目——线性神经网络识别mnist

一、线性神经网络识别mnist 线性神经网络其实也可以叫做线性分类器&#xff0c;其实就是没有激活函数的神经网络来对目标进行识别&#xff0c;像支持向量机、多元回归等都是线性的。这边我采用了线性神经网络来识别mnist数字。 我这边是看了一本讲神经网络的书籍&#xff0c;然…