精华内容
下载资源
问答
  • 最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析。表格内涉及到合并的单元格...所以决定使用Python对Excel进行自动处理,实现一键导出目标Excel的目...

    最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析。

    表格内涉及到合并的单元格,不同表格表头位置有偏差等问题。目标是将所有表格内容相同表头内容统计到一个表内。由于Excel表格内容数据量巨大,如果使用人力的手段,工作量巨大,并且容易出错(预估工作量3天)。所以决定使用Python对Excel进行自动处理,实现一键导出目标Excel的目的。

    大致步骤:Python学习交流群:1004391443

    1.安装Python3,pip工具环境

    2.安装xlrd和xlwt

    3.读取所有源Excel文件

    4.将读取到的Excel信息组织到新的Excel对象中

    5.数据缓存和分析

    6.向新Excel对象中追加分析结果

    7.将新Excel对象保存为目标输出文件(最终想要的文件)

    1.对于Python环境的安装本文不做说明。

    2.安装Python扩展包有不同的方式,这里使用pip命令安装xlrd和xlwt。

    在Windows下,打开命令提示符(控制台),cd python的安装路径下Scripts文件夹下(在这里有pip命令执行工具)。或者将该路径添加到系统环境变量。

    xlrd:读取Excel的扩展包

    执行:pip install xlrd

    xlwt:写入Excel的扩展包

    执行:pip install xlwt

    随便写一个py文件写入import xlrd, xlwt 执行该文件不出错说明安装成功。

    或者打开python自带的编辑器进行输入测试。

    3.具体代码如下

    # -*- coding: utf-8 -*-import xlrdimport xlwtimport sys

    def read(file_list):

    # 创建新的workbook out_work_book = xlwt.Workbook(encoding = "utf-8") # 为了将多个文件的相同表头的sheet和并到一个sheet内,定义新sheet写入的行号位置 out_work_book_rows = [0,0]

    # 取得传入的文件列表 (第一个参数为脚本名字) for file_name in file_list[1:]: # 打开文件 workbook = xlrd.open_workbook(file_name) # 取得当前文档的sheet列表 sheet_names = workbook.sheet_names()

    for sheet_idx in range(len(sheet_names)): sheet_name = sheet_names[sheet_idx] # sheet = workbook.sheet_by_index(sheet_idx) sheet = workbook.sheet_by_name(sheet_name)

    # sheet.row_values(n) 获取整行数据 # sheet.col_values(n) 获取整列数据

    # 获取行数 rows_count = sheet.nrows # 获取列数 cols_count = sheet.ncols # 存储写入的列数 write_col_count

    # 创建新的sheet if len(out_work_book_sheet) <= sheet_idx: out_work_book_sheet[sheet_idx] = out_work_book.add_sheet("sheet"+sheet_idx)

    # 写入sheet for curr_col_num in range(cols_count) # 当前列的内容 col = sheet.col_values(curr_col_num) # 遍历当前列的所有选项 for index in range(len(col)) # 当前列第index的内容 value = col[index] # 在写入的sheet的行号上,加入上一个表写到的位置行号,继续向后追加内容 out_work_book_sheet[sheet_idx].write(out_work_book_rows[sheet_idx] + index, write_col_count, value) write_col_count++ out_work_book_rows[sheet_idx] += cols_count # 输出目标文件 out_work_book.save("out.xls")if __name__ == "__main__": read(sys.argv)

    4.针对合并的单元格,上述代码会出现合并单元格只有一个格子有内容其余为空的情况。这种情形,现将当前sheet表格内所有合并单元格数据保存下来,当遇到属于合并单元格的部分,则默认选取该合并单元格的第一个格子的数值即可。代码如下:

    def get_merged_cells_value(sheet, row_index, col_index):

    # 获得当前sheet的所有合并单元格数据 merged = sheet.merged_cells # 判断给定的单元格,是否属于合并单元格,如果是合并单元格,就返回合并单元格的内容 for (rlow, rhigh, clow, chigh) in merged: if (row_index >= rlow and row_index < rhigh): if (col_index >= clow and col_index < chigh): cell_value = sheet.cell_value(rlow, clow) return cell_value return None

    5.数据缓存可以利用python中的容器,和对象结构,将Excel中的数据对象化,在读取时候进行实例化然后进行保存。在需要进行数据分析的时候利用。

    6.在遇到特殊的表格格式的时候,读取的内容可能在转存的时候出现类型错误,导致无法识别。例如时间类型,正确显示需要按特定格式进行读取并且转换。

    表格类型说明: table.ctype

    0 empty

    1 string

    2 number

    3 date

    4 boolean

    5 error

    代码如下:

    from datetime import datetime,date

    def get_merged_cells_value(workbook, sheet, row_index, col_index):

    # 获得当前sheet的所有合并单元格数据 merged = sheet.merged_cells # 判断给定的单元格,是否属于合并单元格,如果是合并单元格,就返回合并单元格的内容 for (rlow, rhigh, clow, chigh) in merged: if (row_index >= rlow and row_index < rhigh): if (col_index >= clow and col_index < chigh):

    if sheet.cell(rlow, clow).ctype == 3: date_value = xlrd.xldate_as_tuple(sheet.cell(rlow, clow), workbook.datemode) # 转换显示格式为2019/05/05 cell_value = date(*date_value[:3]).strftime("%Y/%m/%d") else: cell_value = sheet.cell_value(rlow, clow) return cell_value return None

    7.最终,我们写一个windows下的bat批处理文件或者在linux下写一个shell,将文档名字作为参数传入执行即可。

    到此我利用程序完成了几天的工作,还可以在以后相同的使用环境下更快速的完成工作。

    相信大家如果有一些编程基础,完全可以通过上述内容,学会使用python处理巨量Excel数据。

    展开全文
  • 就是花费了你们大部分时间的工作!我们Python天团可以帮你们解决问题。 班主任大主管星星说:有。目前有一个大难题。我们每天都会对进群的学员登记他的真实姓名,联系方式,地址,目前薪资,期望薪资以及为什么会...

    4月初,班主任的某次周会议上,华华关切的问了一下:最近班主任们有什么难题吗?就是花费了你们大部分时间的工作!我们Python天团可以帮你们解决问题。

    班主任大主管星星说:有。目前有一个大难题。我们每天都会对进群的学员登记他的真实姓名,联系方式,地址,目前薪资,期望薪资以及为什么会选择柠檬班~然后对于所有学生的缴费情况都会去腾讯进行查验,确保学生有上课的权限,并且每次会提前提醒分期的同学按时缴纳分期费用,防止逾期而没有上课的权限。

    华华:这不是so easy的事情吗?

    星星:不easy,首先学生并不是一天来的,而是每天不同的班级都会有不同的学员入学,那么就要分类整理。第二:每个学生的缴费信息方式不一样,有的是分期,有的是全款,有的是微信账号购买课程,所以为了把入群的qq和这些学费信息核对起来,真的是非常的困难!

    华华:这好办,我帮你搞定(当然那是不可能的),会后找到了Python天团的主管:小简大佬。小简大佬,班主任团队最近遇到了一个比较繁琐的问题,就是统计学生的信息比较费时,可以帮忙用自动化搞定吗?

    简佬(小简大佬的简称):好的呀,有需求吗?我们团队的可优和雨泽可以帮忙做这个事情,你把需求搞定,我们最迟一周内交付,毕竟我们还有自动化测试和测试开发以及公开课的任务在身。 有Python天团的强有力支撑,那么就可以开始行动了!

    PART 1:整理需求

    于是:华华联合星星,疏导了班主任的工作流程以及数据来源,整理出了一份需求。(各位亲爱的VIP学员们,你们的服务都来自于班主任的不辞劳苦!)

    关于学员信息统计:

    包含了如下图所示的一些信息

    其中QQ来自QQ群,微信订单来自柠檬班内部的CRM系统,剩余的信息来自柠檬班的学员信息管理后台(由学员在柠檬班提供的表单上自行填写),经过几轮分析,确定数据来自这3个不同的地方。

    关于学生缴费信息统计:(这关系到学员是否有上课权限,是否会错过上课时间,非常重要!)

    但是这个信息会有2个问题: 1)如果学生是QQ报名的,那么可以直接根据QQ去统计信息。

    2)如果学生是微信报名的,那么需要根据加入班级群的QQ去CRM系统里面找到对应的微信号,然后进行QQ微信匹配后再去腾讯课堂查询,比如说Python17群学员的QQ是:1248***816(保护学生隐私,匿了中间三位数),是通过微信报名的,那么在CRM系统里面的微信账号是:ningmengpyn,我们在腾讯课堂后台只能通过这个微信号才能唯一查询到支付信息

    3)如果学生是分期的,那么还要点击到分期的详情页去查看,分期的支付状态并登记好之后几期分期的支付时间,好定期对学员进行提醒,以免逾期。比如说Python17期某位学员的QQ是:792***306,那么查询到分期订单

    我们需要点击“分期明细”,进入到分期的详情页里面去,才能看到学生的明确支付信息以及每一期的最后支付时间

    PART 2:编写脚本

    需求整理完毕后,图文并茂的交给了简佬,当然part1部分的是简单的描述,尽量让大家可以看的明白点,比较复杂的就不写出来了! 简佬就开始分发任务:可优大佬负责学生缴费信息的统计脚本,雨泽大佬负责学员信息统计脚本,至于具体的实现过程,当然要跟大家分享一下!由华华来进行文字整理,因为华华在这个过程中充当了班主任和Python天团的桥梁和需求整理者。

    关于学员信息统计的脚本实现方式:

    1:首先从对应班集体的QQ群里导出学员的Q信息

    2:然后从柠檬班内部的CRM系统里面导出学员的订单信息

    3:两部分信息都保存至xlsx的文件里面,然后利用Python的openpyxl第三方库对两份数据进行比对,对学员是微信报名的信息与QQ进行匹配,最后完成的第一步效果如下所示:

    4:然后根据学员的QQ信息,利用Python的Python-mysql-connector第三方库进行数据库查询,获取到学员的详细信息,

    脚本的话~~也截图小小的看看,部分代码,并不完整哦!学完柠檬班的Python自动化,你也可以!

    关于学员缴费信息统计的脚本实现方式:

    1:利用学生信息统计的结果进行查询,如果QQ查询不到,就用QQ对应的微信号去进行查询

    2:如果是全款,那么就直接登记信息,如果是分期,就登记分期链接,后期再单独进行分期详细信息的统计与登记。

    3:以上两步是非常清晰的,实现方式无外乎就是web页面元素的定位,方式有多种,xpath css或id,但是这个脚本,有两个亮点要跟大家分享下,希望大家以后遇到这个问题也可以用类似的方法去处理。

    亮点一:查询之前先固定查询的条件

    这里有两个显式的条件需要固定,一个是时间,我们只查询2019年1月1号开始的订单,那么这里就设计到日历的固定于页面的HTML源码

    我们可优大佬实现的方式

    另外一个需要固定的条件是:课程包名称,这个是非selected控件,经过观察是支持模糊查询,并且需要从模糊查询的结果里面选择对应的下拉元素才可以生效的! 页面的HTML源码

    我们可优大佬实现的步骤是:先输入查询的课程条件(尽量可以唯一确定到唯一一个元素,然后选择下拉框的第一个元素,第0个元素显示的是“”全部“”),比如我们输入的是:python全栈自动化测试工程师第7-19期,那么下拉框就会显示可以选择的课程包名称

    我们通过代码选择下拉列表的第一个元素,然后神奇的事情就发生啦!后面出现了隐藏元素,班级!

    那么接下来就是选择班级,但是我们的查询班级下拉框也是非selected的,而且不支持输入只能从下拉元素中选择,页面的HTML源码如下所示:

    我们实现的代码如下所示:

    至此查询的难题已经全部实现,除了这里有点浪费时间,其他的都非常简单!

    亮点二:利用正则匹配分期的数据

    学习自动化,不仅仅要学习Python编程能力还需要学习其他的知识,比如说正则!而且这些在柠檬班自动化的授课里面全都有!这里截取部分代码,仅供参阅!

    这个过程从构思到实现,都是在工作日时间实现的,5月1号,此项目正式上线!并且已经部署到班主任专用的电脑上的jenkins上!这样可以定时的去跑任务啦!班主任也可以开始利用Python来武装自己了!这个年代,不学点自动化,都不好意思说自己是Python班的班主任啦!

    如果最近你发现班主任们变美了,心情也美美哒,每天跟你说话都是元气满满的,那么一定是因为Python给他们工作减负,他们多了时间化妆和休息!

    有兴趣的同学可以多多关注柠檬班的Python自动化课程,可以找专业的Python自动化辅导员来领取专业的学习资料! 柠檬班等你很久了,特意为你准备了一波自动化测试秘籍,助你突破薪资技能瓶颈!

    在这里插入图片描述

    包括 Jmeter、Python编程、Selenium、unittest+Http技术+ddt;appium自动化;还有自动化面试题,以及项目案例分享。有兴趣的可以+我,免费送!

    展开全文
  • 一、IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效...码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率。 IPython 发展到现在,它不仅仅只是一个加强版的 Python...

    一、IPython 简介

    IPython 是一个交互式的 Python 解释器,而且它更加高效。

    它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执行 -> 探索 ,而大部分和数据分析相关的代

    码都含有探索式操作(比如试误法和迭代法),所以 IPython 能大大提高编码效率。

    IPython 发展到现在,它不仅仅只是一个加强版的 Python shell 了, 它集成了 GUI 控制台,这可以让你直接进行绘图操作;它还有一个基于 Web 的交互式笔记本和一个轻量级的快速并行的计算引擎。

    二、编写代码

    在 Terminal 中输入 ipython 既可启动 IPython。
    如果需要使用 Matplotlib 库,则需要在启动的时候标记集成 Matplotlib 包,则启动命令改为:ipython --pylab

    1. 学会使用 Tab 键

    在输入代码的时候,如果这是一个前面已经输入过的内容(比如前面定义的变量),则只需要在 输入了前几个字母之后摁下 Tab 键即可自动补全。
    IPython 拥有这个功能是对标准的 Python shell 的主要改进,这在其他语言的 IDE 中已经非常常见。

    不仅能自动补全变量、对象等,像在 Terminal 中敲入命令一样 Tab 键还可以自动完成文件路径。

    1. 上下箭头键,快速输入历史命令

    当某条命令或代码需要反复输入的时候,不必每次都手动敲一遍,只需要使用上箭头键既可自动补全上一条命令;此时再继续摁上箭头键是上上条命令。
    如果某个命令需要摁很多次上箭头键才能找到,此时只需要输入那条命令的前几个字母然后再摁上箭头键,即可只筛选符合前几个字母的命令。

    1. 执行一个 .py 文件

    如果想要执行一个外部的 .py 文件,使用 %run 命令,例如:在这里插入图片描述
    4. 查看相关代码的通用信息

    当你需要查看一个变量或对象相关的通用信息的时候,在此变量后添加一个问号然后摁回车键即可。例如:在这里插入图片描述
    如果某个函数的包含 docstring,则在函数名后添加一个问号(?)也可以查看相关的 docstring 内容;
    如果在函数名后添加两个问号(??),则可以显示该函数相关的源代码,例如:在这里插入图片描述
    5. 编码过程中相关的快捷键
    Ctrl+F 光标前移1个字符
    Ctrl+B 光标后移1个字符
    Ctrl+A 光标移至行首
    Ctrl+E 光标移至行尾
    Ctrl+U 删除此行光标之前的所有内容
    Ctrl+K 删除此行光标之后的所有内容
    Ctrl+L 清屏(Mac 下 Cmd+K 也可以)

    三、调试代码

    1. 代码发生异常后启动调试器

    在代码发生异常后,输入 %debug 命令会启动调试器并自动跳转到“事发地点”:在这里插入图片描述输入 q 命令退出调试器。

    1. 单步执行

    使用带 -d 选项的 %run 命令可以预先打开调试器,输入 s 单步进入函数调用,输入 n 命令执行到下一行代码,输入叹号(!)紧接着输入变量名可查看变量的值。例如:在这里插入图片描述
    这条命令如果再添加一个指定行号的选项(-b)即可在启动调试器时设置一个断点,例如:在这里插入图片描述
    其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,

    程序员本身就是高贵的一种存在啊,难道不是吗?
    内容就以上怎么多,最后给大家推荐一个口碑不错的

    公众号【程序员学府】,这里有很多的老前辈学习技巧,学习心得,面试技巧,职场经历等分享,更为

    大家精心准备了零基础入门资料,实战项目资料,每天都有程序员定时讲解Python技术,分享一些学习

    的方法和需要留意的小细节,非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不

    傻,钱很多,活得久的快乐的程序员吧!在这里插入图片描述

    展开全文
  • Python是一门优秀的语言,它能...作为程序猿就是希望如何优化代码,精简代码。 因为GIL的存在,Python很难充分利用多核CPU的优势。但是,可以通过内置的模块multiprocessing实现下面几种并行模式: 更多测试经验+测...

    Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此,它还轻松支持多任务处理,比如多进程。

    不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。作为程序猿就是希望如何优化代码,精简代码。

    因为GIL的存在,Python很难充分利用多核CPU的优势。但是,可以通过内置的模块multiprocessing实现下面几种并行模式:

    更多测试经验+测试资料、问答,可添加 qq群:903217991

    1、 多进程并行编程:对于CPU密集型的程序,可以使用multiprocessing的Process,Pool等封装好的类,通过多进程的方式实现并行计算。但是因为进程中的通信成本比较大,对于进程之间需要大量数据交互的程序效率未必有大的提高。

    2、 多线程并行编程:对于IO密集型的程序,multiprocessing.dummy模块使用multiprocessing的接口封装threading,使得多线程编程也变得非常轻松(比如可以使用Pool的map接口,简洁高效)。分布式:multiprocessing中的Managers类提供了可以在不同进程之共享数据的方式,可以在此基础上开发出分布式的程序。 不同的业务场景可以选择其中的一种或几种的组合实现程序性能的优化。

    3、 优化算法时间

    算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。

    例如:set的用法

    set的union,intersection,difference操作要比list的迭代要快。因此如果涉及到求list交集,并集或者差的问题可以转换为set来操作。

    4、 针对循环的优化

    每种编程语言都会强调需要优化循环。当使用Python的时候,你可以依靠大量的技巧使得循环运行得更快。然而,开发者经常漏掉的一个方法 是:避免在一个循环中使用点操作。例如,考虑下面的代码:

    每一次你调用方法str.upper,Python都会求该方法的值。然而,如果你用一个变量代替求得的值,值就变成了已知的,Python就可以更快地执行任务。优化循环的关键,是要减少Python在循环内部执行的工作量,因为Python原生的解释器在那种情况下,真的会减缓执行的速度。

    lowerlist = [‘this’, ‘is’, ‘lowercase’]

    upper = str.upper

    upperlist = []

    append = upperlist.append

    for word in lowerlist:

    append(upper(word))

    print(upperlist)

    #Output = [‘THIS’, ‘IS’, ‘LOWERCASE’]

    5、 函数选择

    在循环的时候使用xrange而不是range;使用xrange可以节省大量的系统内存,因为xrange()在序列中每次调用只产生一个整数元素。而range()將直接返回完整的元素列表,用于循环时会有不必要的开销。在python3中xrange不再存在,里面range提供一个可以遍历任意长度的范围的iterator。

    6、 使用性能分析工具

    除了上面在ipython使用到的timeit模块,还有cProfile。cProfile的使用方式也非常简单:python–m cProfile filename.py,filename.py是要运行程序的文件名,可以在标准输出中看到每一个函数被调用的次数和运行的时间,从而找到程序的性能瓶颈,然后可以有针对性地优化。

    在这里插入图片描述

    展开全文
  • 最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析。 表格内涉及到合并的单元格,...所以决定使用Python对Excel进行自动处理,实现一键导出目标Excel...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 就是花费了你们大部分时间的工作!我们Python天团可以帮你们解决问题。班主任大主管星星说:有。目前有一个大难题。我们每天都会对进群的学员登记他的真实姓名,联系方式,地址,目前薪资,期望薪资以及为什么会选择...
  • ... <p>We all know scripting languages are very good at web site development, but I also want to utilize it to improve my productivity or get some tedious tasks done quickly, maybe some quick-and-...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 不管是centOS,Ubuntu,还是 python 的 pip 安装。有时在下载的时候非常的慢,更换成国内源速度就不会那么慢了,这篇文章教大家如何去更换国内源
  • 我的公众号「码农之屋」(id: Spider1818),分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。 作为...
  • 我用python写了一个工具,迅速提高工作效率。 工作了一段时间发现,电脑桌面上已经满屏的常用软件、常用项目文件夹的快捷方式,一大堆的常用文档,浏览器上收藏的工作网址更是有100+,通常想打开一个文档、网址要...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 就是花费了你们大部分时间的工作!我们Python天团可以帮你们解决问题。 班主任大主管星星说:有。目前有一个大难题。我们每天都会对进群的学员登记他的真实姓名,联系方式,地址,目前薪资,期望薪资以及为什么会...
  • 我用Python编程有几年了, 并且我仍然经常惊讶于Python代码可以如何的简洁,如何的 DRY 。 我学到了很多小贴士和技巧,大多数来自于阅读开源项目的源代码,像Django, Flask, Requests 等。 这里我挑出了几个有时被...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 今天,我们就专门聊聊“如何提问”,掌握正确的提问方式,就能最快解决问题,也就能更快提高。 一、正确准备你的问题 好的问题,首先自己要看懂意思,描述要通顺;其次要完整而清楚,包含足够多的信息,说明白...
  • 但愿这能帮助每个人在2020年提高工作效率,并从中学到一些有用的东西。 一、使用Python3 官方的Python声明:Python2从2020年1月1日开始正式不支持。这篇文章中有一些仅适用于Python3的示例。假如你的Python版本是2.7...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 对于所有的数据科学工作者,如何提高使用Python效率,这里,总结了30种Python的最佳实践、技巧和窍门。希望这些可以帮助大家在2020年提高工作效率,并且在此过程中学习到一些有用的东西。 我创了一个 python交流...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 230
精华内容 92
关键字:

python如何提高工作效率

python 订阅