为了账号安全,请及时绑定邮箱和手机立即绑定

使用 openpyxl 比较和修改来自不同文件的列

使用 openpyxl 比较和修改来自不同文件的列

慕仙森 2023-06-20 16:11:51
我正在编写一个执行以下操作的程序:1.) 从另一个脚本中读取包含经过处理的格式化数据的 CSV 文件2.) 将 CSV 中的数据与用于跟踪随时间变化趋势的 XLSX 文件进行比较,按工作表排序;如果 CSV 中的数据类别在 XLSX 中尚不存在,它将将该类别添加到相应工作表的底部;然后它应该输入从 CSV 到 XLSX 中行末尾的相应数值继承人我到目前为止:import csvimport openpyxllogfile = 'logbook.xlsx'wb = openpyxl.load_workbook(logfile)with open ('working.csv', 'r') as csvfile:    infile = csv.reader(csvfile, delimiter=',')    for col in infile:        if col[1] == 'typeCol':            list = []            list.append(col[3])            ws = wb['typeCol']这将读取所需的列并将唯一的条目类型添加到列表中。我现在想做的是将此列表与 logbook.xlsx 中的特定列进行比较,但是,我似乎无法弄清楚如何让 openpyxl 遍历特定工作表上的特定列以进行比较。-更新-针对回复“没有提供足够的信息来确定解决方案。CSV 和 Excel 工作表中有哪些列?哪个列是进行匹配的关键字段?”关键字段是类型——它们将在 CSV 和 Excel 中完全匹配。CSV 和 excel 列都将包含字母和数字以及可能的符号的组合,所以实际上是任何东西。例子:CSV:Col1 Col2 Col3typ1 asdf 1300typ2 b14f 150typ3 a8-j 11XLSX:Col1 Col2 Col3 Col4 Col5 Col6     SEP1 col populated by corresponding #'sdate ---- JUN1 JUL1 AUG1 SEP1     from CSV abovetyp1 asdf 10   955  756  typ2 b14f 0    6191 3435 typ3 z1z9 919  0    1499 -GENERATE TYP3 FROM CSV HERE AS NEW ROW-非常感谢任何帮助!
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

此代码应该会得到您要查找的结果。它打开 csv 和 excel 文件,并根据 csv 中的关键列更新 excel 文件。如果找不到匹配的键列,它会附加一行。


# Create CSV for test

cdata = '''

Col1 Col2 Col3

typ1 asdf 1300

typ2 b14f 150

typ3 a8-j 11

'''.strip()


with open ('working.csv', 'w') as csvfile:

    csvfile.write(cdata)



###################### Main Script ##########################


import csv

import openpyxl


logfile = 'logbook.xlsx'

wb = openpyxl.load_workbook(logfile)

ws = wb.worksheets[0]


curcol = 6  # SEP1


with open ('working.csv', 'r') as csvfile:

    infile = csv.reader(csvfile, delimiter=' ')

    for i, row in enumerate(infile):

       if i==0: continue  # skip headers

       for xr in range(3, ws.max_row+1):  # check excel sheet

          if ws.cell(xr,1).value == row[0] and ws.cell(xr,2).value == row[1]: # key columns match

              ws.cell(xr,curcol).value = float(row[2])  # copy csv value

              break  # found entry

       else: # did not find entry, must add row

          ws.cell(xr+1, 1).value = row[0]

          ws.cell(xr+1, 2).value = row[1]

          ws.cell(xr+1, curcol).value = float(row[2])

          

wb.save('logbookNew.xlsx')  

//img1.sycdn.imooc.com//64915f650001ffbb03460098.jpg

//img1.sycdn.imooc.com//64915f7200017b1103480120.jpg


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信