基于python的方法将一个excel文件中对应的信息复制到另一个乱序了的excel里面

前言

想写这个东西是因为今天接到了老师的一个任务,老师给了我两个文件夹,其中一个文件夹有考生成绩和考生名字,另一个文件夹有考生名字,不过是乱序的。我要做的就是把这些人成绩一个个对应过来写到新的excel文档里面,不过太浪费眼睛了,我比较懒,所以就想到了python的方法,估计以后还会有很多这种情况,因此记录一下,也许还用得到

参考

本文感谢以下博客的参考:

  1. openpyxl 如何将字典类型的数据写入Excel中
  2. Python3 字典
  3. python中如何遍历字典中的键和值
  4. python操作xlsx格式文件
  5. python pandas 如何读取Excel数据并重新按照指定格式写入Excel文件
  6. 使用python读写xlsx格式中的数据【pandas】

还有一篇以前自己写过的一个博客(实测windows下也一样可以使用)
linux系统下更改pip默认下载源

思考逻辑

首先我把原来的excel文件改了一下样子,就是创建了一个新的,原先的文件包含有学号,排序,姓名等等,但是因为我只需要成绩和姓名,因此我复制了成绩和姓名两列到了一个新的文档,也就是说,以下我的操作的excel都是只有两列,第一列是姓名,第二列是成绩(需要导入的那个为空,但是有部分人已经有成绩了,不过不影响)

我的思路如下:

  1. 将已有成绩的文件在python中打开,并读取数据,将其转换为字典
  2. 将空成绩文件同样在python中打开,并读取数据,没有成绩的部分我用-1来代替了,并将其转换为字典
  3. 将有成绩的字典的值替换没有成绩的字典的值,当然是对应的键的值
  4. 将新的字典生成一个excel文件
  5. 将新的excel文件的东西直接复制到无成绩的excel文件中就行,因为顺序对了,直接复制没什么毛病

代码讲解

需要安装的第三方模块

  • openpyxl
  • pandas
  • numpy

代码分解说明

导入需要的模块

import openpyxl
import pandas as pd
import numpy as np

读取相应的文件

用pandas包来读取,这里对参数我个人理解如下:
sheet_name=0的意思就是返回整张表,如果要结合多个表的话好像是其他参数,不过这里我就没有仔细研究了。
header=0的意思是读取表头,第一行就是表头
usecols的意思是按照列来读取,0和1就是读取第一列和第二列
后面就是把读取到的东西转为了np的格式,方便操作

fileone = pd.read_excel("newinput.xlsx",sheet_name=0,header=0,usecols=[0,1])
filetwo = pd.read_excel("newresult.xlsx",sheet_name=0,header=0,usecols=[0,1])
raw_data = np.array(fileone)
true_data = np.array(filetwo)

读取文件内容

这里我是按照字典的形式来读取,首先是读取有成绩的那部分名单,就是pro_data,赋值这里没什么好说的。下面那个是读取没成绩的名单,没有成绩的话pandas会读取到一个nan的值,因此这里用了np的方法判断是否为nan,是的话就给一个-1的值

pro_data = {}    # 有成绩的excel文件内容
for i in range(len(raw_data)):
    pro_data[raw_data[i][0]] = raw_data[i][1]

res_data = {}    # 无成绩的excel文件内容
for i in range(len(true_data)):
    if np.isnan(true_data[i][1]):
        true_data[i][1] = -1
    res_data[true_data[i][0]] = true_data[i][1]

成绩录入

这部分的本质就是让字典的值赋给另一个字典,也是主要人类工作部分,就是检索,在python里面用两个嵌套的for循环就可以完成,检索到一样的key的时候(就是a==c),会赋值给value

for a,b in pro_data.items():
    for c,d in res_data.items():
        if a == c:
            res_data[c] = b

新字典的导出

grade = openpyxl.Workbook()
gradee = grade.active
gradee.title = 'test'   # excel文件的名字
n = 1
for key,value in res_data.items():
    gradee['A' + str(n)] = key   # 这个A就是对应的单元格的意思
    gradee['B'+ str(n)] = value
    n = n + 1

grade.save('test.xlsx')

完整代码,方便复制

import openpyxl
import pandas as pd
import numpy as np

fileone = pd.read_excel("newinput.xlsx",sheet_name=0,header=0,usecols=[0,1])
filetwo = pd.read_excel("newresult.xlsx",sheet_name=0,header=0,usecols=[0,1])

raw_data = np.array(fileone)

pro_data = {}
for i in range(len(raw_data)):
    pro_data[raw_data[i][0]] = raw_data[i][1]

true_data = np.array(filetwo)

res_data = {}
for i in range(len(true_data)):
    if np.isnan(true_data[i][1]):
        true_data[i][1] = -1
    res_data[true_data[i][0]] = true_data[i][1]

print(res_data)

for a,b in pro_data.items():
    for c,d in res_data.items():
        if a == c:
            res_data[c] = b

print(res_data)
print(pro_data)

grade = openpyxl.Workbook()
gradee = grade.active
gradee.title = 'test'
n = 1
for key,value in res_data.items():
    gradee['A' + str(n)] = key
    gradee['B'+ str(n)] = value
    n = n + 1

grade.save('test.xlsx')

总结

python就是爽
防火防盗防诈骗

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的openpyxl库来实现这个功能,代码如下: from openpyxl import load_workbook wb1=load_workbook('文件1.xlsx') wb2=load_workbook('文件2.xlsx') for sheet in wb1.worksheets: wb2.create_sheet(title=sheet.title) wb2[sheet.title].cell(row=1,column=1).value=wb1[sheet.title].cell(row=1,column=1).value for row in range(2,wb1[sheet.title].max_row+1): for col in range(1,wb1[sheet.title].max_column+1): wb2[sheet.title].cell(row=row,column=col).value=wb1[sheet.title].cell(row=row,column=col).value wb2.save('新文件.xlsx') ### 回答2: 要将两个Excel的所有工作表复制到另一个Excel,可以使用Python的openpyxl库来处理。 首先,需要安装openpyxl库,可以使用以下命令进行安装: ``` pip install openpyxl ``` 接下来,可以按照以下步骤编写Python代码来实现复制工作表的操作: 1. 导入所需的库: ```python from openpyxl import load_workbook from openpyxl import Workbook ``` 2. 打开源Excel文件和目标Excel文件: ```python source_excel = load_workbook('源文件.xlsx') target_excel = load_workbook('目标文件.xlsx') ``` 3. 获取源Excel文件和目标Excel文件的所有工作表: ```python source_sheets = source_excel.sheetnames target_sheets = target_excel.sheetnames ``` 4. 遍历源Excel文件的所有工作表,并将每个工作表复制到目标Excel文件: ```python for sheet_name in source_sheets: source_sheet = source_excel[sheet_name] # 如果目标Excel文件已存在同名工作表,可以选择删除该工作表 if sheet_name in target_sheets: del target_excel[sheet_name] target_sheet = target_excel.create_sheet(sheet_name) # 遍历源工作表的所有行和列,并将其复制到目标工作表 for row in source_sheet.iter_rows(values_only=True): target_sheet.append(row) ``` 5. 保存目标Excel文件: ```python target_excel.save('目标文件.xlsx') ``` 以上代码将循环复制Excel文件的每个工作表到目标Excel文件,并保存目标Excel文件。 注意:在运行代码之前,请确保源Excel文件和目标Excel文件已存在,并将其命名为相应的文件名。另外,还需根据实际情况修改文件名和文件路径。 ### 回答3: 要将两个Excel的所有工作表复制到另一个Excel文件,可以使用Python的openpyxl库来实现。 首先,我们需要安装openpyxl库。可以使用以下命令在终端或命令提示符进行安装: ``` pip install openpyxl ``` 然后,我们可以按照以下步骤编写代码: 1. 导入所需的库: ```python import openpyxl ``` 2. 用openpyxl库打开源Excel文件和目标Excel文件: ```python source_book = openpyxl.load_workbook('源文件路径.xlsx') target_book = openpyxl.load_workbook('目标文件路径.xlsx') ``` 3. 获取源Excel文件内的所有工作表名称: ```python sheet_names = source_book.sheetnames ``` 4. 遍历每个工作表,并复制到目标Excel文件: ```python for sheet_name in sheet_names: source_sheet = source_book[sheet_name] target_sheet = target_book.create_sheet(sheet_name) # 在目标Excel文件创建同名工作表 for row in source_sheet.iter_rows(): for cell in row: target_sheet[cell.coordinate].value = cell.value # 复制源工作表的单元格内容到目标工作表 ``` 5. 保存目标Excel文件: ```python target_book.save('目标文件路径.xlsx') ``` 完成这些步骤后,源Excel文件的所有工作表将被复制到目标Excel文件。 请注意,在运行代码之前,将源文件路径和目标文件路径更改为实际的文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值