首页 > 其他分享 >openpyxl解析xlsx文件示例

openpyxl解析xlsx文件示例

时间:2024-04-08 10:36:20浏览次数:27  
标签:xlsx itime sheet openpyxl 示例 ilist time pai

#coding=utf-8
import openpyxl

def read_sheet(book_name, sheet_name):
    return openpyxl.load_workbook(book_name)[sheet_name]

def get_pai2times(sheet, pai_col, time_col):
    records = dict()
    for row in sheet.iter_rows(min_row=2, max_row = sheet.max_row):
        pai, time = row[pai_col].value, row[time_col].value
        if pai not in records:
            records[pai] = [time]
        else:
            records[pai].append(time)
    return records

def fetch_one(pai, ilist, olist):
    if not ilist:
        otime = olist[0]
        olist.remove(otime)
        return [pai, None, otime]
    if not olist:
        itime = ilist[0]
        ilist.remove(itime)
        return [pai, itime, None]

    itime = ilist[0]
    ilist.remove(itime)
    itime_nxt = ilist[0] if len(ilist) > 0 else None
    otime = None
    for curr_time in olist:
        # 没有下一次进场,出场时间比进场时间大就行
        if itime_nxt is None:
            if curr_time > itime:
                otime = curr_time
        # 有下一次进场,出场时间必须介于两次进场时间中间
        else:
            if curr_time >= itime and curr_time <= itime_nxt:
                otime = curr_time

        if otime is not None:
            olist.remove(otime)
            break
    return [pai, itime, otime]

def write_xlsx(xlsx_file, inr, outr):
    all_pai = set(inr.keys()) | set(outr.keys())

    new_xlsx = openpyxl.Workbook()
    sheet1 = new_xlsx.active
    sheet1.append(["车牌", "进场时间", "出场时间"])
    for pai in all_pai:
        ilist = [] if pai not in inr else inr[pai]
        ilist = sorted(ilist, key=lambda x: x.timestamp())

        olist = [] if pai not in outr else outr[pai]
        olist = sorted(olist, key=lambda x: x.timestamp())

        while len(ilist) > 0 or len(olist) > 0:
            row = fetch_one(pai=pai, ilist=ilist, olist=olist)
            sheet1.append(row)
    
    with open(xlsx_file, "wb") as f:
        new_xlsx.save(f)

if __name__ == '__main__':
    inr = get_pai2times( sheet=read_sheet(book_name='in.xlsx', sheet_name='Sheet1'), pai_col=7, time_col=8 )
    outr = get_pai2times( sheet=read_sheet(book_name='out.xlsx', sheet_name='Sheet1'), pai_col=7, time_col=8)
    write_xlsx(xlsx_file="total.xlsx", inr=inr, outr=outr)

 

标签:xlsx,itime,sheet,openpyxl,示例,ilist,time,pai
From: https://www.cnblogs.com/rex4399/p/18120570

相关文章

  • 【办公类-48-02】20240407每月电子屏台账汇总成docx-2(腾讯文档xlsx导入docx,每页20条)
    作品展示背景需求:安全主任再次催交台账一分园老师发的是链接版——这是我原来制作的在线共享填写“腾讯文档”。但是感觉手机竖版填写起来不方便,(表格是横版的,要向右滑动点击格子,填起来容易错行),所以我推荐使用问卷星填写了。腾讯文档里面是选择按钮填入信息,也是所有数据......
  • 选择器示例
    fromlangchain_community.embeddingsimportOllamaEmbeddingsfromlangchain_community.llms.ollamaimportOllamafromlangchain_community.vectorstores.faissimportFAISSfromlangchain_core.example_selectorsimportSemanticSimilarityExampleSelectorfromlan......
  • Android Graphics 多屏同显/异显 - C++示例程序(标准版)
    ”为了理解Android多屏同显/异显的基本原理,我们将从NativeLevel入手,基于GraphicsAPIs写作一个简单的C++版本的多屏显示互动的演示程序。通过这个程序我们将了解常用的多屏显示相关的接口的使用方法。“  01多屏显示C++示例概况 源码下载请查看文章末尾源码下载方......
  • React19 新特性 – 附带代码示例的更新
    ReactJS是前端开发世界中最流行的UI库之一。我喜欢React的原因之一就是它背后的团队以及社区对它的热情。当社区提出对新功能和改进的需求时,团队会倾听。React的未来令人兴奋而有趣。如果我必须用一句话来总结,我会说这几乎概括了一切:“少写代码,多实现功能。”在本......
  • 如何使用CSS变量 - 通过代码示例解释
    如果你正在构建网站或Web应用程序,你应该已经知道代码重复被认为是一种不良实践。这就是为什么你应该学习如何使用CSS变量来减少你编写的CSS代码量并将你的样式带到一个新的水平。最成功的Web应用程序拥有令人惊叹的设计。不幸的是,为了达到预期的效果,Web开发人员需要准备大量的样......
  • 配置交换机双归接入IP网络示例(V-STP方式推荐)
    组网需求如图4-23所示,通过配置M-LAG双归接入IP网络可以满足以下要求:当一条接入链路发生故障时,流量可以快速切换到另一条链路,保证可靠性。为了高效利用带宽,两条链路同时处于active状态,可实现使用负载分担的方式转发流量。图4-23 配置M-LAG双归接入IP组网图配置思......
  • 配置M-LAG双归接入普通以太网络示例(根桥方式)
    组网需求如图4-22所示,采用M-LAG方式将主机双归接入普通以太网络。由于用户对于业务的可靠性要求很高,如果主机和接入设备之间做链路聚合只能保证链路级的可靠性,接入设备发生故障时则会导致业务中断。这时用户可以采用跨设备链路聚合技术,正常工作时链路进行负载分担且任何一台......
  • Vue3 Diff 之 patchKeyedChildren 动态示例
    在学习全网学习各路大神的关于Vue3Diff算法分析文章的时候,一定离不开关键方法patchKeyedChildren。patchKeyedChildren处理的场景比较多,大致有5个主要过程。如果你希望查看不同测试用例下,patchKeyedChildren具体的内部处理过程,可以尝试一下这个:《Vue3Diff之patchKey......
  • 【WPF应用34】WPF基本控件-Menu的详解与示例
    WPF(WindowsPresentationFoundation)是.NET框架的一个部分,用于构建桌面应用程序的用户界面。在WPF中,菜单(Menu)是一种常用的控件,用于提供一组选项或命令,使用户可以根据自己的需要执行特定的操作。本文将详细介绍WPF中的Menu控件,包括其基本用法、属性和事件。同时,我们将通过一......
  • 排序代码示例
    冒泡排序#include<iostream>usingnamespacestd;intmain(){ intm[]={6,8,44,7,9,34,64,1}; for(intj=0;j<8;j++){ for(inti=j+1;i<8;i++){ if(m[j]>m[i]){ swap(m[j],m[i]); } } } for(inti=0;i<8;i++){ cout<<m[i]<<......