用python按某列值拆分excel表格程序及优化

本文讲述了处理大型CSV文件的需求,首先尝试使用VBA,但遇到速度问题。然后转向Python,编写了代码进行数据拆分,但初始版本执行速度极慢。经过性能调优,包括避免不必要的遍历和打印操作,优化数据结构等,显著提高了代码运行效率,将处理时间大幅缩短。最后给出了优化后的Python代码。
摘要由CSDN通过智能技术生成

用python按某列值拆分excel表格程序及优化

需求

  • 要处理几个七八百兆大的csv文件,需求是把它里面每个站的数据拆分成单独的excel文件。
  • 网上有现成的方方格子软件,处理起来发现挺慢,要花5天多时间
  • 站的数量有上千个,用excel2010打开一个csv也显示不全,不知道如果导入access或者单机的mysql,oracle里执行下会不会很快,试了下access,版本是2010的,导入csv文件表头处理的就有问题,看来用access不是很理想。
  • 先想到了用excel自带的VBA来处理下,自己没学过,只是通过搜索来自编程序,结果卡在了永远只能复制第一行到新表里,复制其他行就是不往下走,不知道如何解决,有高手看到了请帮忙看看此问题已解决,使用Application.CutCopyMode = False就可以搞定,不过貌似执行起来速度挺慢。
  • 于是改用python来处理,百度了很多案例学习了下,改成了真正能实现的代码,跑了一个470MB的文件居然花了约8小时,加了个调试为了看进度,结果跑700MB的文件居然花了24小时居然只处理了十分之一数据,这才拿一部分数据试了下加调试信息和不加的差异,发现果然很大,有的语句尽管没开开关,但只要放在循环里就很耗时,必须注销掉。
  • 优化后估算700MB的文件只要跑约9小时。

VBA代码

Sub ExtractBySite()
    Dim Wb1, Wb2, Wb3 As Workbook
    Dim cPath$, siteName$, newFilePath$
    cPath = ThisWorkbook.Path & "\"  '获取本文件所在路径
    Set Wb1 = ThisWorkbook  '如果放在本文件中执行则直接用这个读取站点信息
    '提示选择数据文件
    MsgBox ("请选择要拆分的数据文件")
    FilePathFull = Application.GetOpenFilename("所有文件 (*.*), *.*", 0, "选定文件", , False)
    If FilePathFull <> "False" Then
        Filename = Right(FilePathFull, Len(FilePathFull) - InStrRev(FilePathFull, "\"))
        FilePath = Left(FilePathFull, Len(FilePathFull) - Len(Filename))
        FileHead = Left(Filename, InStrRev(Filename, "-") - 1)
        &#
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值