Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

最近发现做办公自动化表格匹配的时候还是csv格式的文件最快、效率是最高的

今天接到一个需求就是大致内容之这样的

1、给我一张表格直邮一列A列,内容是运单号

2、需要用相同的单号去另外一张表格匹配数据

3、其实就是Excel中的常见的vlookup

但是想要匹配的表格有几十个,所以这样你还觉得用vlookup方便么

在这里插入图片描述

解决方案

1、将想要匹配的表格(Excel转换成CSV),如果你的表格本身就是csv可以跳过此步骤

文件夹【数据源】,作用:存放你想要转换csv的表格——请提前创建好

文件夹【数据源(csv)】,作用:存放你转换好之后的csv文件——请提前创建好

代码

import os,time
import pandas as pd  # 导入pands库
def xlsx2csv_mh():
    # 读取xlsx数据
    for f in os.listdir("./数据源/"):
        t1 = time.time()
        data = pd.read_excel("./数据源/" + f, index_col=0)  # 设置index_col=0,写入文件时第一列不会存在序列号
        data.to_csv("./数据源(csv)/" + f + '.csv', encoding='utf-8')  # 将数据写入csv文件
        print(f"{
      
      f}转换完成......")
        t2 = time.time()
        print(t2 - t1)

xlsx2csv_mh()

2、 做匹配项,保存为json文件

我做的匹配项可一键多值,就是如:A列作为建:[B列+C列+D列。。。],以这样的形式

如图,我就想以C列为键,G列、I列、J列为值

在这里插入图片描述

读取上一步转换好csv的文件夹

list_a.append((row[2],row[6]+"="+row[8]+"="+row[9])),这行就是我做的列表,row[2]就是键,row[6]+“=”+row[8]+“=”+row[9],这个就是值,中间我用=等于号隔开了

文件夹【json文件】,作用:存放做好的json文件——请提前创建好

代码(接上一步):

import json
import os
from collections import defaultdict
import csv

for f in os.listdir('./数据源(csv)/')[:1]:
    list_a = []
    d = defaultdict(list)
    with open('./数据源(csv)/'+ f, newline='', encoding='utf-8') as csvfile:
        # 读取 CSV 文件内容
        reader = csv.reader(csvfile, delimiter=',', quotechar='"')
        # 遍历 CSV 文件中的每一行数据
        for row in reader:
            # 处理每一行数据
            # print(row)
            list_a.append((row[2],row[6]+"="+row[8]+"="+row[9]))
    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文件

在这里插入图片描述

读取json,进行测试

代码

with open("./json文件/10月.xlsx.csv.json","r",encoding="utf-8")as f:
    res = json.load(f)

print(res['SF16xxxxxxx'])

成功!!

在这里插入图片描述

好了,分享结束,希望能够帮助到你

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_42636075/article/details/131371974