首页 > 其他分享 >shutil,sys,xlwt,xlrd模块---------------vlookup匹配相同内容,不同顺序的数据

shutil,sys,xlwt,xlrd模块---------------vlookup匹配相同内容,不同顺序的数据

时间:2023-07-27 11:36:10浏览次数:33  
标签:xlwt sheet index vlookup --------------- 索引 write index2 index1

代码如下:
import shutil
import sys
import xlwt
import xlrd

file1 = "a.xlsx"
# 打开表1
wb1 = xlrd.open_workbook(filename=file1)
# 表1要匹配的列索引
hid_index1 = 0
# 表1目标数据列索引
target_index1 = 1
# 表1的sheet
sheet1 = wb1.sheet_by_index(0)
# 表1的sheet的总行数
rowNum1 = sheet1.nrows
# 表1的sheet的总列数
colNum1 = sheet1.ncols

file2 = "b.xlsx"
# 打开表2
wb2 = xlrd.open_workbook(filename=file2) # 打开文件
# 表2要匹配的列索引
hid_index2 = 0
# 表2目标数据列索引
target_index2 = 2
# 表2的sheet
sheet2 = wb2.sheet_by_index(0) # 通过索引获取表格
# 表2的sheet的总行数
rowNum2 = sheet2.nrows
# 表2的sheet的总列数
colNum2 = sheet2.ncols

# xlwt准备生成一个新的文件
write_workbook = xlwt.Workbook()
write_sheet = write_workbook.add_sheet('sheet1', cell_overwrite_ok=True)

for index2 in range(0, rowNum2):
for col_index in range(0, colNum2):
# 遍历表2的每一行每一列,把对应的单元设置到新的文件中,即复制了表2的数据
write_sheet.write(index2, col_index, sheet2.cell_value(index2, col_index))
# 在遍历列过程中,如果碰到目标数据列索引.即需要补充的字段,则进行遍历表1,判断的id索引匹配
if col_index == target_index2:
for index1 in range(1, rowNum1):
hid1 = sheet1.cell_value(index1, hid_index1)
if hid1 == sheet2.cell_value(index2, hid_index2):
# 如果两个表的id相同则把表1的单元内容设置到表2对应的单元格
write_sheet.write(index2, col_index, sheet1.cell_value(index1, target_index1))

# 保存新的文件
write_workbook.save('new.xlsx')
实现效果如下:
a表

 b表

 产生新表new表

 

标签:xlwt,sheet,index,vlookup,---------------,索引,write,index2,index1
From: https://www.cnblogs.com/cherishthepresent/p/17584491.html

相关文章

  • MFC-realloc修改数组容量
     TCHAR*p,*q;//分配初始内存空间p=(TCHAR*)malloc(10*sizeof(TCHAR));//初始化p中的数据for(inti=0;i<9;i++){*(p+i)=_T('a');}*(p+9)=_T('\0');//扩容pq=(TCHAR*)realloc......
  • js 0.02 - 0.01 - 0.01 怎么得出 0.00999999999,如何修正
    ......
  • plsql-同义词
    同义词:同义词是对象的别名,不占用任何实际的存储空间,只在oracle数据字典中保存其定义描述,在使用同义词时,oracle会将其翻译为对象的名称用途:简化sql语句隐藏对象的名称和所有者为分布式数据库的远程对象提供位置透明性提供对数据库对象的公共访问创建数据库链......
  • Verilog-1995,2001,2005差异
    1、Verilog不同版本的差异下图是Verilog各个阶段的关键字列表:2、Verilog-1995VSVerilog-20011、模块声明的扩展(1)       Verilog‐2001允许将端口声明和数据类型声明放在同一条语句中,例子如下: (2)Verilog‐2001中增加了ANSIC风格的输入输出端口声明,可以用于module,t......
  • 2、了解Webots的窗口-2
    一、WebotsGUI由四部分组成:1、3D窗口:显示并允许与3D模拟交互的窗口;2、Scenetree:它是当前世界的层次表示;3、Texteditor:允许编辑源码;4、Console:显示编译和控制输出;二、分别介绍一下八个菜单栏1、File:允许执行通常的文件操作,如加载,保存等等2、View:允许控制仿真窗口中的可视......
  • CF1053E-Euler Tour题解
    前言还是一道神仙题很难想题面luogu上copy的样例解释懒得翻,我觉得应该都看得懂样例吧。题面翻译现有一棵\(n\)个点的形态未知的树,给定其长度为\(2n-1\)的欧拉序的一部分请根据给出的残缺的欧拉序还原出一个完整的欧拉序或判断不存在这样的树输入中用非零数字表示欧拉......
  • 正点原子Ubuntu入门012---Linux C编程
    一、编写C语言程序Ubuntu中编写和编译是分开的,一般使用vim编辑器编写程序,或者使用vscode编写;使用gcc进行编译设置vim编辑器,一个Tab=4字节使用vi打开文件/etc/vim/vimrc,在此文件最后输入以下代码setts=4  设置vim编辑器,显示行号 测试案例:1#include......
  • 尚硅谷Java 宋红康2023版 - 学习笔记
    尚硅谷Java宋红康2023版-学习笔记观看地址https://www.bilibili.com/video/BV1PY411e7J6JDKJREJVMjdk是开发包,jre是运行包,jvm是java虚拟机(最小核心)javajdk版本8或11我这里就用8了。......
  • DeepObfusCode:Source Code Obfuscation Through Sequence-to-Sequence Networks
    一、Introduction代码混淆技术旨在解决代码逆向对抗问题。本质上,代码混淆技术的目标是:在保持一个程序逻辑结构不变以及完整保存的前提下,同时让攻击者不易识别,以此保护软件的完整性和知识产权。传统的防护策略包括:插入空白/冗余的逻辑运算增加不必要的条件运算等传统的混淆......
  • ip6tables-save
    ip6tables-save保存ip6tables表配置补充说明ip6tables-save命令将Linux内核中ip6tables表导出到标准输出设备上。语法ip6tables-save(选项)选项-c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值;-t:指定要保存的表的名称。......