python读取CSV文件表头字段乱序作json文件(自己笔记)

news2024/11/26 20:30:28

有时候我们会将csv文件的某列对应某列(或这某几列);如{A:[B,C,D,E]},说白了就是一个键对应的值是一个列表,但是有时候我们的值在表头中位置不一致,这时候我们就需要先获取每一个字段的索引值,这样程序就会通过索引值自动找到对应的值在表头中的索引。

如下图(我故意写反了):

1、将A列作为键

2、将[寄件网点,派件网点]作为值,但是位置不一定

在这里插入图片描述
在这里插入图片描述

解决方案,找到索引,前提是字段必须在表头中

import csv
with open('./原始账单大网(csv)/' + f, newline='', encoding='utf-8') as csvfile:
    # 读取 CSV 文件内容
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    # 遍历 CSV 文件中的每一行数据
    zd_list = ['寄件网点', '派件网点']
    indexs_list = []
    for row in reader:
        count += 1
        if count == 1:
            for z in zd_list:
                # print(row.index(z))
                indexs_list.append(row.index(z))
        else:
            print(indexs_list)
            break

成功找到

在这里插入图片描述

下面是作json文件

1、 list_a.append((row[0], row[indexs_list[0]] + “=” + row[indexs_list[1]]))

2、row[0],这个就是我的A列,也就是键

3、 row[indexs_list[0]] + “=” + row[indexs_list[1]],这个就是我的值[‘寄件网点’, ‘派件网点’],中间通过“=”,等号连接,方便split切割,当然可以继续添加其他字段

import json
import os
from collections import defaultdict
import csv
def write_json():
    for f in os.listdir('./数据源(csv)/'):
        list_a = []
        d = defaultdict(list)
        count = 0
        print(f)
        with open('./数据源(csv)/' + f, newline='', encoding='utf-8') as csvfile:
            # 读取 CSV 文件内容
            reader = csv.reader(csvfile, delimiter=',', quotechar='"')
            # 遍历 CSV 文件中的每一行数据
            zd_list = ['寄件网点', '派件网点']
            indexs_list = []
            for row in reader:
                count += 1
                if count == 1:
                    for z in zd_list:
                        # print(row.index(z))
                        indexs_list.append(row.index(z))
                else:
                    # print(indexs_list)

                    # 处理每一行数据
                    # print(row)
                    list_a.append((row[2], row[indexs_list[0]] + "=" + row[indexs_list[1]]))
        for key, value in list_a:
            d[key].append(value)  # 省去了if判断语句
        with open(f"./json文件/{f}.json", "w", encoding="utf-8") as f_w:
            f_w.write(json.dumps(d, ensure_ascii=False))
        print(f"{f},转换json成功")

然后是将刚刚的json文件合并成一个

def merge_json():
    # 定义一个空的字典,用于存储合并后的json数据
    merged_data = {}
    # 遍历所有的json文件,将数据合并到merged_data中
    for file in os.listdir("./json文件/", ):
        with open("./json文件/" + file, 'r', encoding="utf-8") as f:
            data = json.load(f)
            merged_data.update(data)
    # 将合并后的json数据写入到merged_file中
    with open("合并json/res.json", 'w', encoding="utf-8") as f:
        json.dump(merged_data, f, ensure_ascii=False)  # 防止中文乱码


# merge_json()

最后是匹配

import json
import os
import numpy as np
import openpyxl
import pandas

wb = openpyxl.load_workbook("./模板(勿动)/"+os.listdir("./模板(勿动)/")[0])
ws = wb.active

with open("合并json/res.json", "r", encoding="utf-8")as f:
    res = json.load(f)

# print(res['SF16xxxxxxx'])

df = pandas.read_excel("./数据源/"+os.listdir("./数据源/")[0],usecols="A",dtype=str,keep_default_na='')
ydh_list = np.asarray(df.stack())

for y in ydh_list:
    # print(y)
    res2 = res.get(y,"-")
    if res2 != "-":
        ws.append([y,res2[0].split("=")[0],res2[0].split("=")[1]])
    else:
    	ws.append([y,'',''])


wb.save("./匹配结果.xlsx")

全部匹配到,当然匹配不到可以为空,代码里我也加了

在这里插入图片描述

其中合并json那一步应该是可以省略的,因为我们上一步可以全部读取完,直接写在一个json文件里,大家可以自己完善一下!

希望对大家有帮助!!

更多关于办公自动化的知识,请关注我吧

更多关乎Excel操作请关注我的专栏吧

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

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

相关文章

[Flask] Flask的请求与响应

1.Flask的请求 如果以GET请求访问URL,例如URL是127.0.0.1:5000/?nameandy&age18,那么如何获取这个URL的参数?如果以POST请求提交一个表单,那么又如何获取表单中各个字段值呢? Flask提供的Request请求对象就可以实现上述功能 Reques…

uniapp开发的微信小程序之实现转发功能以及页面跳转传递、接收对象

效果图&#xff1a; 转发功能&#xff1a; <template><view class"container"><button class"share-btn" open-type"share">转发</button></view> </template><script> export default {data() {re…

规划电子类专业生涯:打造单片机/嵌入式技术专家之路

如果我是一个电子类专业的学生&#xff0c;打算将来从事单片机/嵌入式方向的职业&#xff0c;我可能会采取以下步骤来规划我的职业生涯&#xff1a; 学术准备&#xff1a;我将全面学习电子工程的基础知识&#xff0c;包括模拟电子、数字电子、信号处理等方面的知识。我会确保自…

page cache 在内核中的数据结构

page cache 在内核中的数据结构是一个叫做 address_space 的结构体&#xff1a;struct address_space。 struct address_space {struct inode *host; // 关联 page cache 对应文件的 inodestruct radix_tree_root page_tree; // 这里就是 page cache。里边缓存了文件的所有缓…

拼多多购物中的4个开关需尽快关闭,防止个人购买信息泄露

拼多多购物中的4个开关需尽快关闭&#xff0c;防止个人购买信息泄露 随着网络购物的普及&#xff0c;越来越多的人选择在拼多多等平台进行购物。然而&#xff0c;在享受便利的同时&#xff0c;我们也要警惕个人购买信息泄露的风险。在拼多多购物时&#xff0c;有些设置可能会影…

Hyperledger Fabric核心配置文件(1)

1、core.yaml core.yaml配置文件是Peer节点的示例配置文件&#xff0c;具体路径在fabric-samples/config目 录下。该core.yaml示例配置文件共指定了如下六大部分内容。 1.日志部分 日志记录级别有6种&#xff1a; CRITICAL、 ERROR、 WARNING、 NOTICE、 INFO、 DEBUG. …

CUDA矩阵乘法GEMM优化,从全局内存到共享内存优化的详细流程

在​未优化的矩阵乘法​CA*B中&#xff0c;a、b和c分别是指向矩阵 A、B 和 C 的全局内存的指针&#xff1b;blockDim.x、blockDim.y、 和TILE_DIM都等于 w。wxw-thread 块中的每个线程计算 C 的tile中的一个元素&#xff0c;row并且col是由特定线程计算的 C 中元素的行和列。该…

celery----异步任务、延时任务、定时任务

Celery 是一个强大的分布式任务队列&#xff0c;它可以让任务的执行完全脱离主程序&#xff0c;甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务&#xff08;async task&#xff09;和定时任务&#xff08;crontab&#xff09;。它的架构组成如下图 &#xff1a…

初学帆软踩得坑——数据填报_Excel数据导入

第一次做数据填报&#xff0c;按照教程做完在用excel导入工具本地数据报表的时候出现 1、整块空白合并单元格&#xff0c;数据无法填入的现象 2、表格重新导入一批&#xff0c;无法成功入库&#xff0c;导致只能导入一次&#xff0c;如下图&#xff1a; 说明&#xff1a;点击…

python网络编程(四),用面向对象方式实现文件上传下载

一&#xff1a;背景 在之前已经实现了文件的下载&#xff0c;现在再来完善上传功能&#xff0c;并且使用面向对象来封装&#xff0c;让代码看起来更加清楚明了。 二&#xff1a; 使用规则和运行结果 下载文件&#xff0c;下载格式 get 文件名 get空格后面直接接文件名称&…

MySQL-SQL InnoDB引擎 (下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道&#xff1a; 【直播预告】HarmonyOS极客松赋能直播第三期&#xff1a;一次开发多端部署与ArkTS卡片开发

朴素模式匹配算法(暴力寻找字串)

目录 0. 前言1. 算法简介2. 代码实现3. 运行结果 0. 前言 使用朴素模式匹配算法查找子串是否位于主串中 开发环境&#xff1a;Dev-Cpp 操作系统&#xff1a;Windows10 专业版 1. 算法简介 朴素模式匹配算法&#xff0c;也称为暴力模式匹配算法或穷举法&#xff0c;是一种简…

自己动手写C语言float浮点数转换字符串的函数

最近在项目中用到了holtek厂商的HT45F24A和BA45F5650两款单片机。 用的开发工具是HT-IDE3000&#xff0c;烧录软件是HOPE3000。 这两款单片机都是8位的单片机&#xff0c;支持寄存器位操作。 HT45F24A单片机不带UART串口&#xff0c;要想实现串口功能&#xff0c;只能自己用定时…

基于肺部图片与文本信息的多模态模型架构

文章题为 「A transformer-based representation learning model with unified processing of multimodal input for clinical diagnostics」 https://www.nature.com/articles/s41551-023-01045-x &#xff08;arXiv版链接: https://arxiv.org/abs/2306.00864&#xff09; htt…

2020年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

2020 级考研管理类联考数学真题 一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。 1、某产品去年涨价 10%&#xf…

备战2024秋招面试题-Vue的框架原理

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;快秋招了&#xff0c;那么这个专栏就专门来记录一下&#xff0c;同时呢整理一下常见面试题 &#x1f49e;部分题目来自自己的面试题&#xff0c;部分题目来自网络整理 给我冲 学习目标&am…

阿里云服务器ECS介绍_云主机_服务器托管_弹性计算

阿里云服务器安全可靠、弹性可伸缩&#xff0c;CPU可选256核、内存选到3072GB&#xff0c;云服务器ECS规格通用型、计算型、内存型、通用算力型、裸金属、GPU、大数据等ECS实例规格&#xff0c;公网带宽可选到200M&#xff0c;绑定弹性公网EIP带宽可达1000M&#xff0c;共享带宽…

9.外部中断

1.中断概念&#xff1a; &#xff08;1&#xff09;STM32的每个IO口都可以作为外部中断输入&#xff1b; &#xff08;2&#xff09;stm32的中断控制器支持19个外部中断/事件请求 线0~15&#xff1a;对应外部IO口的输入中断&#xff1b;线16&#xff1a;连接到PVD输出&#…

基于jsp+Servlet+mysql的汽车销售系统

基于jspServletmysql的汽车销售系统 一、系统介绍二、功能展示1.项目骨架2.登录界面3.首页4.购物车5.添加车辆6、编辑车辆信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于JSPServlet的汽车销售系统 项目架…