Python批量读取csv(xlsx)文件指定表头获取内容(表头可乱序)

news2024/11/24 4:21:14

程序背景

我们在日常办公中经常会遇到去csv或者excel文件中去剪切自己需要的列,然后重新粘贴在新的文件中,但是这样的工作方式非常的耗时,且效率低下,那么是否有一种方法,只要我提供表头就可以快速将我需要的表头生成一个新的文件呢,这样就可以批量处理了

需求如图:

左边的原文件的表头太多,我只想要右边的表头文件,如果复制粘贴确实可以做到,但是如果文件量非常庞大的话,这是非常耗时的!!

那么今天我们利用python来实现,批量读取!

在这里插入图片描述

第 1 种 读取 xlsx的Excel文件

安装
pandaspip install pandas
openpyxlpip install openpyxl

目录结构

文件夹—【数据源】:存放你的数据源(可多个不限制数量)

文件夹—【结果】:保存后的结果

在这里插入图片描述

代码1

注意1:head = [‘姓名’,‘地址’,‘电话’],这是你想获取的表头(可乱序)

# -*- coding: utf-8 -*-
'''
@作者    :一晌小贪欢
'''
import os

import openpyxl
import pandas as pd


def read_excel():
    # 表头
    head = ['姓名','地址','电话']
    for f in os.listdir("./数据源/"):
    	wb = openpyxl.Workbook()
        ws = wb.active
        ws.append(head)
		row_1 = 0
        indexs = []
        reader = pd.read_excel("./数据源/"+os.listdir("./数据源/")[0],header=None)
        for row in reader.values.tolist():
            row_1 += 1
            if row_1 == 1:
                # print(row)
                for h in head:
                    if h in row:
                        # print(h,row.index(h))
                        indexs.append(row.index(h))
                continue
            res_data = []
            for i in range(len(head)):
                res_data.append(row[indexs[i]])
            ws.append(res_data)
            print(res_data)

    print(f"{f},已存储陈功!!")
    wb.save("./结果/res.xlsx")

read_excel()

## 第 2 种 读取 csv文件(都是内置库)

代码2:

注意1:head = [‘姓名’,‘地址’,‘电话’],这是你想获取的表头(可乱序)

注意2:注意数据源csv的编码方式,encoding=‘utf-8’,如果不是utf-8,可将csv文件用记事本打开,然后另存,另存的时候点击下面的编码——先择——UTF-8(如下图)

在这里插入图片描述

# -*- coding: utf-8 -*-
'''
@作者    :一晌小贪欢
'''

import csv
import os


def read_csv():
    # 表头
    head = ['姓名',	'地址','电话']
    for f in os.listdir("./数据源/"):
        # 打开 CSV 文件
        with open("./结果/" + '结果-' + f.split('.')[0] + '.csv', 'w', newline='', encoding='utf-8') as csv_w:
            csv_w = csv.writer(csv_w)
            csv_w.writerow(head)
            with open("./数据源/" + f, newline='', encoding='utf-8') as csvfile:
                # 读取 CSV 文件内容
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                # 遍历 CSV 文件中的每一行数据
                row_1 = 0
                indexs = []
                for row in reader:
                    row_1 += 1
                    if row_1 == 1:
                        # print(row)
                        for h in head:
                            if h in row:
                                # print(h,row.index(h))
                                indexs.append(row.index(h))
                        continue
                    res_data = []
                    for i in range(len(head)):
                        res_data.append(row[indexs[i]])

                    csv_w.writerow(res_data)

        print(f"{f},已存储陈功!!")


read_csv()

进阶版(csv版)(可筛选每一列的内容),这里我换了一个数据源

注意1:head = [‘承运商’, ‘店铺名称’,‘交易平台’,‘订单类型’,‘平台付款时间’],这里依旧便是表头

lie_list:这个列表中的小列表与表头相匹配,如我的小列表[‘SF’,‘shunfeng’],表示:head中【‘承运商’】我只要选取为:‘SF’,以及‘‘shunfeng’’的,然后以此类推

如下代码

if res_data[0] in lie_list[0] and
res_data[1] not in lie_list[1] and
res_data[2] in lie_list[2] and
res_data[3] in lie_list[3] and
res_data[4] not in lie_list[4]:

上述代码只要你在lie_list中的小列表为空,你就在对应的索引下 加个not ,如上述代码中的第二条以及第五条,表示,我要选取【‘店铺名称’】中所有的数据 以及 选取【‘平台付款时间’】中所有的数据,依次类推

import csv
import os


def read_csv():
    # 表头
    head = ['承运商', '店铺名称','交易平台','订单类型','平台付款时间']
    lie_list = [

        ['SF','shunfeng'], # 第一个表头的内容
        [],# 第2个表头的内容
        ['JD'], # 第3个表头的内容
        ['销售出库'],
        [],
                ]
    for f in os.listdir("./数据源(CSV)/"):
        # 打开 CSV 文件
        with open("./结果/" + '结果-' + f.split('.')[0] + '.csv', 'w', newline='', encoding='utf-8') as csv_w:
            csv_w = csv.writer(csv_w)
            csv_w.writerow(head)
            with open("./数据源(CSV)/" + f, newline='', encoding='utf-8') as csvfile:
                # 读取 CSV 文件内容
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                # 遍历 CSV 文件中的每一行数据
                row_1 = 0
                indexs = []
                for row in reader:
                    row_1 += 1
                    if row_1 == 1:
                        # print(row)
                        for h in head:
                            if h in row:
                                # print(h,row.index(h))
                                indexs.append(row.index(h))
                        continue
                    res_data = []
                    for i in range(len(head)):
                        res_data.append(row[indexs[i]])
                    # res_data = [row[indexs[0]], row[indexs[1]],row[indexs[2]]]
                    if res_data[0] in lie_list[0] and \
                       res_data[1] not in lie_list[1] and \
                       res_data[2] in lie_list[2] and \
                       res_data[3] in lie_list[3] and \
                       res_data[4] not in lie_list[4]:
                        # print(res_data)
                        # print(list(enumerate(row)))
                        csv_w.writerow(res_data)

        print(f"{f},已存储陈功!!")


read_csv()

希望对大家有帮助

致力于办公自动化的小小程序员一枚

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

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

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

相关文章

刚刚出炉!速看7月编程语言排行榜!

2023年已经过半,最新一期的编程语言排行榜你看了吗?刚刚,全球知名编程语言社区TIOBE公布了7月榜单,和播妞一起来看吧! TIOBE 7 月 TOP 15 编程语言: 详细榜单可参考官网: https://www.tiobe.co…

超越廉价: 制造一种稀缺性,产品/服务本身具有一种不可复制、与众不同的特性。

文章目录 I 超越廉价1.1 培养自己的稀缺性1.2 为核心客户提供一些价值I 超越廉价 制造一种稀缺性,产品/服务本身具有一种不可复制、与众不同的特性。 时效性:具有时效性的东西天然具有不可复制的特性直播的时效性是重播不可替代的地方人的技能也是有时效性的,当满大街都是某…

最大正方形(力扣)暴力 + 动态规划 JAVA

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“…

陆航组训VR虚拟交互教学软件提高团队协作水平

出于陆航独特的空中环境,难以确保航空兵连队接受高质量的空中飞行训练,造成陆航连队无法保持良好的战备状态,随着VR虚拟现实技术越来越成熟,VR公司深圳华锐视点充分了解陆航训练教学的重点和难点,制作陆航训练VR教学课…

大模型技术发展概述 - (一)

文本内容参考论文《A Survey of Large Language Models》 论文标题:A Survey of Large Language Models 论文链接:https://arxiv.org/pdf/2303.18223v10.pdf 因为这个论文内容太多了,所以我的文章分成几篇来展示!目录如下&#x…

每日一练 | 华为认证真题练习Day76

1、标准STP模式下,下列非根交换机中的哪个端口会转发由根交换机产生的TC置位BPDU? A. 根端口 B. 备份端口 C. 预备端口 D. 指定端口 2、STP协议中根桥发出的配置BPDU报文中的Message Age为0。 A. 对 B. 错 3、STP中选举根端口时需要考虑以下哪些参…

若依官方前端手册 小笔记

提供确认窗体信息 this.$modal.confirm(确认信息).then(function() {... }).then(() > {... }).catch(() > {}); 提供遮罩层信息 // 打开遮罩层 this.$modal.loading("正在导出数据,请稍后...");// 关闭遮罩层 this.$modal.closeLoading(); 验证…

Android 进程与进程之间的通讯 详解及实现步骤 -- 两个app实现

详情如下: 一、Intent二、Messenger三、AIDL四、广播五、文件 分两个app -- 客户端为:jinc1application、服务端为:jinc2application 一、Intent 这是 Android 中最常用的通讯方式,主要用于启动 Activity、Service 等 jinc1applic…

校园网免认证/校园网pojie

我们的目标是xiao yuan wang pojie 我们使用一个简单的python脚本,用于jiechu /pojie校园网只能登录一台手机和一台电脑的限制,仅供学习。 原理 我们利用已有可正常上网的校园网账户作为跳板,连上网后在后台下线账号所登录的设备&#xff0…

CNVnator软件的安装

1. 下载CNVvator CNVvator软件比较难安装,其依赖root软件等 下载地址 点击其release,下载最新版本v0.4.1(CNVnator_v0.4.1.zip) 2. 安装依赖 root 软件 root 的下载地址 root , 选择下列Ubuntu 20版本 解压root压缩包: ##解压 tar -zxv…

pdf转图片操作方法是什么?分享两个简单的方法!

PDF转图片是一个常见的需求,无论是为了方便编辑、共享,还是为了其他用途,我们需要简单而有效的方法来实现这个目标。本文将介绍两种简单的PDF转图片方法:记灵在线工具和截图方法。 记灵在线工具是一个强大而易于使用的在线工具&a…

如何结合云原生和低代码

前言 云原生和低代码是当今IT领域最流行的两个概念。云原生是一种应用架构设计、应用部署乃至应用开发过程的方式,而低代码是一种快速开发应用的方法。这两者有什么关系?如何结合呢? 先思考一个问题——一个杯子和一个苹果如何结合&#xf…

七牛云的使用(图片超详讲解)

一、为什么要使用七牛云的OSS(对象存储服务)? 二、七牛云使用: 登录七牛云官网,注册并认证 (初次认证有30天免费使用权限)新建存储空间 点击创建的空间名字,进入 空间概括如下: 阅读帮助文档,在自己的…

JavaCV实现byte[]转RTMP流

需求:通过私有的api我可以不断收到byte[]形式的视频数据,现在我需要处理这些数据,最终推送出RTMP流。 实现:通过管道流将不断收到的byte[]视频数据转化为输入流然后提供给JavaCV的FFmpegFrameGrabber使用,然后通过FFmp…

两种传输层协议TCP和UDP【图解TCP/IP(笔记十二)】

文章目录 两种传输层协议TCP和UDPTCP与UDP区分UDP的特点及其目的TCP的特点及其目的 两种传输层协议TCP和UDP 在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDP。 ■ TCP TCP是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排…

【C++】C++11 (2): 右值引用、移动构造、移动赋值和模板的可变参数

一、右值引用和移动语义 C11更新后,容器中增加的新方法有插入接口函数的右值引用版本 这些接口的意义在哪?网上都说它们能提高效率,它们是如何提高效率的? 请看下面的右值引用和移动语义的介绍。另外emplace还涉及模板的可变参…

开发跨平台APP,是用Flutter还是React Native开发框架?

随着移动互联网的飞速发展,对于开发人员而言,如何快速地开发出兼容不同平台(iOS、Android)的应用,成为了一个重要的问题。 跨平台应用程序开发框架的好处: 1. 一个App适用于多个设备; 2. 一个…

问一下路过的大神keil5与keil5mdk 的区别是什么?

从Keil C51都Keil5 MDK,不知不觉已经用了Keil十几年。 虽然现在新增了一些开发环境,不过keil对于老工程师来说,应该是最亲切的了… Keil出过很多个版本,很多人最熟悉的是Keil C51和Keil5 MDK。 我们在做STM32程序开发编译的时候…

Centos7安装SDWebui

Centos7安装SDWebui 1.nvidia显卡驱动安装 #查看显卡编号 lspci | grep -i vga#查询显卡型号 http://pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci#安装依赖包 yum install kernel-devel gcc -y #查看nouveau是否已禁用,如果有内容说明没有禁用 lsmod | gre…

记录一下2023.2kali的默认密码和修改root用户密码的方法

要水一篇博客了…… 默认登录用户名/密码: kali/kali 切换root用户: sudo su 这时输入的密码是kali 然后就切换到了root用户 输入passwd root 提示修改新密码 根据提示输入两遍新密码就修改了root用户的密码啦 (感觉改不改的其实也……无所…