惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
D
Docker
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
A
About on SuperTechFans
博客园 - 【当耐特】
U
Unit 42
H
Help Net Security
博客园 - 三生石上(FineUI控件)
V2EX - 技术
V2EX - 技术
T
Tor Project blog
博客园 - 叶小钗
G
Google Developers Blog
S
Securelist
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
The Register - Security
The Register - Security
Recorded Future
Recorded Future
NISL@THU
NISL@THU
量子位
L
LangChain Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CERT Recently Published Vulnerability Notes
The Hacker News
The Hacker News
D
DataBreaches.Net
小众软件
小众软件
罗磊的独立博客
Forbes - Security
Forbes - Security
The Last Watchdog
The Last Watchdog
Jina AI
Jina AI
I
InfoQ
S
Schneier on Security
Recent Announcements
Recent Announcements
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Secure Thoughts

kok的笔记本

macOS 里 神秘的 kernel_task ,为什么一直在写入硬盘? 产品 node_modules 为什么总是这么大:一次从原理到实践的瘦身记录 谁来救救我的Mac存储空间-清理工具横评:付费vs免费,从界面到命令行 2023 读书推荐 写给播客嘉宾的录制说明书 在 Electron 中使用 Vue Devtools 几何原本中勾股定理的证明 Mac 安装软件时提示 已损坏,无法打开 应该怎么办 PegBoard 你的数字白板 少数派读者与作者的 NewsLetter 闲棋冷子-2-2021年我读过哪些很棒的书 闲棋冷子-1-相信你的身体,它不会骗你 修复 macOS 中 Cisco Anyconnect 报的奇怪Bug 我的 NAS 使用记录 Omniplan 入门教程 Hugo升级0.74记录 一年级产品经理需要掌握什么知识? 无籍之谈-3-和盖盖聊聊尼尔·盖曼与中外科幻 露营笔记-装备篇 无籍之谈-2-和鹏仔聊华尔街兴盛史,给小白投资者的一些建议 介绍一下《无籍之谈》 无籍之谈-1-和不土聊佛学,谈谈《一心走路》《僧侣与哲学家》 高达模型入门 - 工具整理 5 分钟了解 Sketch 的新特性 Tint - 色调 Hugo 主题移动端开发的一些心得 修复 macbook 键盘连击问题 在 Hugo 中使用 Open Graph 提升分享效果 选小米10 还是小米10 Pro? 为什么家国梦不好玩? 高雄85大楼 Mac优秀软件推荐-Itsycal 找到并和正确使用无版权资源 Excel 常用函数 一 无线吸尘器挑选指南 钢铁、蒸汽与 19 世纪 聊聊《铁道之旅》 如何挑选一个电脑电源? 有用的正则表达式 给psd瘦身 2019第二季度读书总结 组装 ITX 黑苹果主机 Intel CPU 挑选指南 常用的 Markdown 工具 2019第一季度读书总结 怎么用尺规作图画75°角? 在 Hugo 中使用 Sass 真正的换位思考-《爱的沟通》读书笔记 Hugo 中使用思维导图 反叛公司中的治理者和顾问玩法 如何搭配成为一个盐系男生? 反叛公司 Rebel Inc. 入门指南 如何评估需求,预估开发成本? 小米8、小米8SE、小米8青春版参数对比 微信外部链接内容管理规范分析 在售 iPhone 参数对比 给Hugo blog中增加一些插件 微信 MacOS 多开的一些实践 矩阵与线性变换的概念理解 尺规作图小习题 用 hugo 和 netlify 搭建blog 介绍我自己 瓜摊老板 Really? EDM邮件营销,你需要知道 果子沟大桥 喀赞其的马车 清晨的木梨硡 hexo 主题开发 青龙寺的狮子 用一个特殊方法解决同位词问题 语义化 html 标签 数模的基本思路和写作攻略 hexo blog 搭建 0.1,0.1^0.1,为什么数值是波动的? 智能手机之旅 老师和学生的博弈 这些使用抗生素的方式,你做的对吗? 炼金术与钢之炼金术师 kok的笔记本 kok的笔记本 中国长征运载火箭家族-PegBoard
利用 Python 批量合并 Excel 文件
kokdemo · 2020-01-17 · via kok的笔记本

我经常需要手工处理一些日报,怎么提升工作的效率呢?

用 Python !

背景是这样的:

每天都会收到一个项目的数据日报,然后我需要将这些日报和之前的历史数据进行合并。更复杂的情况是,每个日报都不止一个sheet,如果手工复制的话,一个文件就需要复制三遍。

想想工作量还是很大的,所以就需要通过python来解决这个问题了。

打开 Anaconda,点击 JupyterLab,启动。(是的我越来越懒了,懒到不愿意去维护开发环境了)

一、导入库

这里会使用 osxlrdpandaspathlib 四个库。

xlrd 是用来读取 xls 文件的,pandas 是用来合并数据和写文件的。

pathlib 是用来兼容windows和unix平台(linux or macos)的文件路径的

import os
import xlrd
import pandas as pd
from pathlib import Path

二、遍历要合并的文件

给一个目标文件夹,将这里面全部的文件都生成文件路径。

def file_name(file_dir):
    list=[]
    for file in os.listdir(file_dir):
        if os.path.splitext(file)[1] == '.xls' or os.path.splitext(file)[1] == '.xlsx':
            list.append(file)
    return list

三、合并输出文件

def merge_xlsx(path,filenames,sheet_num,output_filename):
    data = []   #定义一个空list
    title = []
    path_folder = Path(path)
    for i in range(len(filenames)):
        read_xlsx = xlrd.open_workbook(path_folder / filenames[i])
        sheet_num_data = read_xlsx.sheets()[sheet_num] #查看指定sheet_num的数据
        title = sheet_num_data.row_values(0)   #表头
        for j in range(1,sheet_num_data.nrows): #逐行打印
            data.append(sheet_num_data.row_values(j))
    content= pd.DataFrame(data)
    #修改表头
    content.columns = title
    #写入excel文件
    output_path = path_folder / 'output'
    output_filename_xlsx = output_filename + '.xlsx'
    if not os.path.exists(output_path):
        print("output folder not exist, create it")
        os.mkdir(output_path)
    content.to_excel((output_path / output_filename_xlsx), header=True, index=False)
    print("merge success")

四、写入变量并运行

下面是完整的代码:

import os
import xlrd
import pandas as pd
from pathlib import Path

def get_filename(file_dir):
    list=[]
    for file in os.listdir(file_dir):
        if os.path.splitext(file)[1] == '.xls' or os.path.splitext(file)[1] == '.xlsx':
            list.append(file)
    return list

def merge_xlsx(path,filenames,sheet_num,output_filename):
    data = []   #定义一个空list
    title = []
    path_folder = Path(path)
    for i in range(len(filenames)):
        read_xlsx = xlrd.open_workbook(path_folder / filenames[i])
        sheet_num_data = read_xlsx.sheets()[sheet_num] #查看指定sheet_num的数据
        title = sheet_num_data.row_values(0)   #表头
        for j in range(1,sheet_num_data.nrows): #逐行打印
            data.append(sheet_num_data.row_values(j))
    content= pd.DataFrame(data)
    #修改表头
    content.columns = title
    #写入excel文件
    output_path = path_folder / 'output'
    output_filename_xlsx = output_filename + '.xlsx'
    if not os.path.exists(output_path):
        print("output folder not exist, create it")
        os.mkdir(output_path)
    content.to_excel((output_path / output_filename_xlsx), header=True, index=False)
    print("merge success")

if __name__ == "__main__":
    path = r'/Your/Path' #这里无论什么平台都按照unix风格来输入文件路径
    filenames = get_filename(path)
    merge_xlsx(path,filenames,0,"sheet1") #合并文件中第一个表的数据,输出到 output/sheet1.xlsx中
    merge_xlsx(path,filenames,1,"sheet1") #合并文件中第二个表的数据,输出到 output/sheet2.xlsx中

使用了之后,原来合并一周日报要半个小时,现在只用运行一遍,效率高太多啦!