学Python 不加班 轻松实现办公自动化

978-7-115-56557-0
作者: 何华平
译者:
编辑: 王冉

图书目录:

详情

这是一本关于如何利用Python提高日常办公效率的书,书中凝聚了作者多年的实践经验和独特思考,旨在帮助读者准确、高效地完成大量高重复度的工作。 《学Python,不加班:轻松实现办公自动化》汇集了日常办公和处理文档时常见的问题,通过实例的演示与讲解,帮助读者灵活有效地使用Python处理工作中遇到的问题。全书共11章,涵盖Python的各种应用场景,具体包括文件管理自动化,网络信息自动获取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、图片文件的自动化处理,模拟鼠标、键盘操控本地软件,自动化运行管理等。本书力图淡化编程中的抽象概念,贴合工作场景,注重实战效果,通过对Python技术的巧妙讲解,帮助读者成为高效率的办公室“超人”。 《学Python,不加班:轻松实现办公自动化》适合任何想要学习Python编程的读者,尤其适合缺乏编程经验的初学者。同时本书提供所有案例的源代码文件,方便读者边学边练,爱上Python编程。

图书摘要

版权信息

书名:学Python,不加班——轻松实现办公自动化

ISBN:978-7-115-56557-0

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


编  著 何华平

责任编辑 王 冉

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


这是一本关于如何利用Python提高日常办公效率的书,书中凝聚了作者多年的实践经验和独特思考,旨在帮助读者准确、高效地完成大量高重复度的工作。

本书汇集了日常办公和处理文档时常见的问题,通过实例的演示与讲解,帮助读者灵活有效地使用Python处理工作中遇到的问题。全书共11章,涵盖Python的各种应用场景,具体包括文件管理自动化,网络信息自动获取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、图片文件的自动化处理,模拟鼠标、键盘操控本地软件,自动化运行管理等。本书力图淡化编程中的抽象概念,贴合工作场景,注重实战效果,通过对Python技术的巧妙讲解,帮助读者成为高效率的办公室“超人”。

本书适合任何想要学习Python编程的读者,尤其适合缺乏编程经验的初学者。同时本书提供所有案例的源代码文件,方便读者边学边练,爱上Python编程。


在互联网信息技术革命的背景下,人类的生产和生活方式都在发生巨大的变革。“时间就是金钱,效率就是生命”,互联网时代的人们更加追求效率,通过自动化技术不断提升工作效率。

随着大数据时代的来临,各行各业的数据量越来越大,新数据的产生频次在加快,数据的类型也在增多。我们要处理的各种数据和文案资料越来越多,工作量越来越大,工作负荷越来越繁重。以前,完成一个文案工作,可能最多处理十来个文件,现在可能要处理几十个甚至上百个资料文档,导致工作压力越来越大。

传统的思维方式是针对每个具体问题找出相应的软件工具。汇总报表用Excel,写报告用Word……我们要安装太多的软件和插件,掌握太多的工具,熟记太多技巧。但是,软件的功能总是固定的,一旦写成就“僵化”了,而工作需求总是千变万化。我们要么被动等待软件更新,要么安装更多的软件。同时,不同的任务需要不同的软件完成,我们需要不断地在各种软件之间切换,这本身也是很烦琐的工作。

面临处理海量资料的挑战,仅靠“熟练运用办公软件”已经难以应对,传统的工作方法需要改变。如何改变?如何应对大数据时代的挑战?解决办法就是学习编程,通过程序操控软件、组合工具、驾驭数据,来实现真正的批量化、自动化、定制化。编程就是给计算机下指令,让计算机自动完成复杂的工作,将我们从烦琐的重复性工作中解救出来。无论是IT从业人员,还是管理人员、财务人员、销售人员、自由职业者、学生……学习编程都将给自己赋能,有利于自身的职业发展。

当然,编程本身就是个难题。很多人也尝试过学习编程,但总是半途而废。大部分人觉得这很难,他们认为程序员是数学家,需要艰苦地钻研各种高精尖的技术难题。结合笔者学习编程的经历来说,兴趣是最好的老师,我们往往把编程看得太神秘,过多地关注程序语言的语法和复杂的算法,而忘记了为什么学习编程。我们总是试图学完一门语言的全部语法,然后再用程序来解决实际问题。语法本身非常枯燥,而相关的案例又和实际工作毫不相干。尽管潜心研究很久,却对现实问题束手无策,编不出一个能用的小程序,最后只能放弃。

其实,我们并不需要多么高深的编程技巧,更不需要系统地开发一个软件,有时候几行代码就能设计出功能足够强大的工作效率改善工具。当年笔者磕磕绊绊地用一段VBA代码完成了多个Excel表格的自动汇总,这件事给笔者带来极大震撼,也让笔者走上了编程之路。工作中,但凡有需要重复做3遍以上的文案工作,笔者都会考虑是否可以开发个小工具来完成。

笔者在构思本书时,也曾犹豫过到底选用什么语言来写。这些年笔者用过很多语言,如VBA、C#、Java……其实殊途同归,每种效率工具都可以用不同的语言来实现,现在笔者开始固定用Python。在程序员的世界中有句话广为流传:“人生苦短,就用Python。”这句话非常形象地说出了Python语言在程序员心目中的地位。21世纪是人工智能的时代,Python被称为最接近人工智能的编程语言,所以,学好Python对日后的发展有一定的帮助。同时,Python已经被编入一些地区的小学教材,已经成为人人都要学的一项基本技能,这些趋势表明Python很有前景,同时入门也很简单。

很多年前,当笔者开始应用Python时,书店还没有多少关于Python的图书。而如今,这方面的图书已经摆满了书架,但这些图书大多是枯燥的教程,还有一些是讲“高大上”的数据分析,鲜有介绍如何用Python来处理办公室的各种烦琐的工作的。无人驾驶的汽车已经上路,而很多办公室人员还在靠“复制+粘贴”完成各种报表、报告的汇总。这也促使笔者下决心写一本能够满足读者这方面需求的书。

当然,要提高工作效率,仅仅会写代码是不够的。想成为一名优秀的流程优化大师,还需要有全方位、透彻理解问题本质的能力,善于把实际的烦琐任务拆解成准确的效率问题,并运用相关的知识来解决。本书尝试从这个角度出发,帮助读者认识烦琐任务的本质,引导读者从效率的角度来思考、拆解任务,并最终顺利地达成目标。

(1)浅显、通俗,零基础、入门级的讲解,特别适合初学者阅读。

(2)内容实用,基于真实场景,以便高效地解决实际问题。

(3)循序渐进,授人以渔,帮助读者提升自学能力。

本书是一本专为普通办公人员打造的实战型Python工具书,适合所有想提高工作效率的办公人员,特别适合那些经常与各种办公软件打交道、经常处理复杂、烦琐的文档任务,希望通过学习编程来减少重复劳动的职场人士。本书也非常适合即将步入职场的大、中专院校学生阅读,还可以作为培训机构的教学用书。

本书从实际出发,每个实例都介绍了设计思路与知识点,避免读者走弯路。无论是初学者还是有一定基础的读者,通过学习本书,都可以编写出属于自己的应用程序。

由于编者水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有更多的宝贵意见,或者对书中的案例有更好的解决方案,欢迎发邮件给我们,期待能够得到读者的反馈。

感谢人民邮电出版社,特别感谢编辑在本书写作中提出了宝贵建议,让此书顺利完成。

感谢所有Python第三方库作者,是你们让Python更强大。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是szys@ptpress.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近40年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

异步社区

微信服务号


本章介绍了各种提高工作效率的工具,以及它们的优点和缺点。本章还详细介绍了Python的安装、开发环境的配置、编程风格等,目的是让读者能尽快在自己的计算机上写出第一个Python程序。兴趣是最好的老师,亲手写出第一个程序,感受到编程的乐趣,就已经成功了一半。

Python已经是现代人不可或缺的工具。如果你熟悉下面的场景,你可以考虑学习Python。学习Python可以更好地解决问题,提升工作效率。

我们天天都在忙,究竟在忙些什么?

查找各种文件,在一个个文件夹里来回穿梭。

在TXT、XLS/XLSX、DOC/DOCX、PPT、PDF文档之间来回切换,复制、粘贴,运指如飞。

打开几十个网页,以便及时获取信息。

将各种数据输入系统,以及把数据填写到各种Excel表格中。

各种办公系统、ERP软件的日常操作,不停地用鼠标点点点。

这些场景构成了我们的工作日常。当然,有时候我们还会面对各种“变态”的工作任务,例如整理陈年档案,从几千份简历中提取参加应聘人员的信息,向系统输入上千条数据,用网页查询几千个手机号归属地,删除几百个Word文档中的关键词……

说起来,我们真忙,还没练成“无影手”,就已经得了“鼠标手”“键盘手”和颈椎病。据媒体报道,都市白领普遍存在过度劳累现象。问题是,加班加点地“忙”,效率有提升吗?

将我们日常的工作归纳一下,可以分为以下几大类。

1.查找资料

据说,人的一生差不多有三分之一的时间要浪费在找东西上,除了有目的地找东西以外,还有很大一部分时间浪费在找不到的东西上。我们花了大量时间找资料,这里的资料包括本地资料和网络资源。

本地资料是指计算机上的文件。我们在使用计算机时,会花大量的时间找文件。我们每天还消耗了大量时间上网查资料,但是效率也不高,不一定能找到有价值的资料。

如果不花时间认识文件,那么就会花更多时间找文件。什么是文件?文件有哪些类别?文件的结构是怎么样的?不同的文件有什么特征?文件是如何存储的?我们需要抽点时间学习文件管理,同时再认识一下常用的几种文件。

同样,我们天天上网,但是我们真的懂网络吗?例如,网页的结构、网络通信,一个简单的单击背后的数据传输原理等。磨刀不误砍柴工,懂网络以后,我们通过爬虫技术,能够千百倍地提升找资料的效率。有程序24小时为我们“盯”着网站,怎么会错过重要信息呢?

随着互联网的高速发展,数据总量急剧增长。在大数据的时代,我们查找资料的方式也需要转变,对于有些工作,人脑得让位于计算机。例如,我们用搜索引擎搜索资料,可能有用的资料要在搜索结果的十几页、几十页、甚至几百页之后才会出现,如图1-1所示,那么仅靠肉眼一页一页地翻看,恐怕难以达到目的。

图1-1

工作中,我们经常浏览网页和各种论坛。一个网络热帖有时会有几百页,人工看完非常耗时间,如图1-2所示。通过爬虫技术,我们可以一次性获取各个分页的地址,然后在分页的源代码里面提取出文字信息,得到“脱水版干货”,大大节约了时间。

时间是宝贵的,不应该浪费在找资料这种重复而乏味的事情上。

图1-2

2.提取数据

大数据时代,大家都在谈数据分析、数据的可视化呈现和各种炫酷的图表制作技巧。

在现实工作中,数据在哪里呢?数据并不是规整地放在数据库中,事实上,大量的数据封锁在一张张Excel表格里、在Word文档里、在PDF文档里,甚至在扫描的图片里,还有的数据封闭在企业内网的各种专用数据终端里。我们日常要做的工作就是数据提取和清洗,这是很基础但也很重要的工作。

例如,金融行业离不开企业分析,然而企业年报披露材料中有很多是PDF扫描件,其中的文字无法复制,财务表格千差万别,数据难以提取。股权结构、股东结构隐藏在图片中,也难以提取。数据提不出来,自然无法进行统计、汇总和比较。

所以,我们看到在投资银行里,大量的新员工前几年的工作都是“摘数据”,即从各种PDF版本或者纸质文件的企业年报中,手动地把财务数据提取到Excel表格里。

假设我们需要对全国的银行做一个深度分析,那么就需要获取所有银行的信息披露报告。对于非上市银行来说,其信息披露报告散见于各地市级的报纸。我们通过全国报刊数据库可以下载报纸电子版,很多电子版报纸都是PDF格式或者图片格式,如图1-3所示。因此提取和清洗数据问题的难点就在于解析PDF和图片,提取文字和表格中的数字。

图1-3

3.填写表格

工作中我们总是有太多的表要填,这一点相信大家都深有体会。“上面千条线,下面一根针。”工作要留痕,台账少不了,还得有图片。工作做完不算完,还有很多报表要填。每个人身上都背负了几十张报表,如日报、周报、月报、季报等。

实际工作中要填写一堆表格,而很多表格上面的信息都是重复的。一方面,我们期望报表少一点;另一方面,我们也要适应管理部门的要求。管理越来越精细,数据搜集越来越频繁,自然报表就会越来越多。从技术角度来说,填表就是数据的搬运。各个部门都有自己的报表格式和样式,同样的数据要装入不同的报表。这种工作最适合用程序来自动完成。如果将这几十张报表的钩稽关系、交叉引用关系理清楚,则只需要一张基础信息表,其他报表都可以通过引用来自动生成。自动化填表既保证了效率,又确保了数据的一致性,而手动填表误差在所难免,经常出现“数据打架”的问题。

有时还需要把Excel表格中的数据填到各种企业内网系统里,这需要大量的键盘录入工作。我们改变不了系统设计,因此只能优化工作方式。建立数据和键盘按键之间的联系,让键盘自动录入数据,这些问题自然就可以解决。

4.制作文书

在各种报告、方案和文件的制作上花费了过多时间,可能是导致工作进展缓慢的重要原因。

我们经常写报告,这些报告有各种模板,每期更新一下。每次写都要花很多时间将数据从Excel表格中查出来,填在Word文档里面。这些常规性的报告,占据了工作人员绝大多数的时间。

还有就是各种方案的反复修改,也非常消耗时间。首先是部门内部的沟通,很多时候,领导安排写方案时也不能特别清楚地表达需要什么样的效果。只有在看完初稿以后,才提出设计的方向。有时候,领导的想法会反复变化,方案也需要不断调整。花了很多时间,方案终于在部门内部定稿。然后是部门之间的协调,征求各部门意见后再进行方案修改。最后,要在公司层面的会议上讨论方案,随之而来的就是庞杂的会议材料制作。如果公司高层提出了意见,那么方案又要修改,又要制作庞杂的会议材料,等待再次上会讨论。如果文书制作耗时很长,那么再次上会讨论的时间就会拖得很久,当然工作也就无法继续推进。等到讨论时,大家可能已经忘记了上次会议的内容,以及当时为何要提出修改。这仅仅是内容层面的修改,有时候还会涉及格式的修改。越是大型的企业,越是强调格式的标准化。对于总部或部门的管理人员来说,文案的格式、字体等是否标准也许比内容还重要。

除了Word报告,还有PPT制作。说到做PPT,很多人觉得要花很多心思,要抠细节并进行艺术设计。其实在快节奏的社会,PPT是有时效性的。例如,一位销售马上要见客户,快速地整理出一份产品分析PPT是至关重要的。有时候PPT制作数量非常大,例如会议桌卡,或者单页的产品介绍,往往是几百行的TXT文档,按顺序将每一行分别输入每一张幻灯片中,形成上百张幻灯片。这种操作没有任何技术含量,但如果手动去做,会超级烦琐,格式往往还无法整齐划一。

图1-4所示分别是Word版、PPT版、PDF版的研究报告。

图1-4

如果我们能将文书制作工作自动化,那么办公效率将会得到极大提升。如何自动化?我们日常打交道的文书,不外乎TXT、XLS/XLSX、DOC/DOCX、PPT、PDF这些文件格式。我们日常的工作,就是不断创建文件,把数据装进去;打开文件,把数据提出来;把数据从这种格式的文件中取出来,放到另一种格式的文件中去。实际上,绝大多数工作都涉及文件的操作,如图1-5所示。

图1-5

只要我们深入了解各种文件的底层格式,把各种格式文件之间的联系打通了,数据自然而然会在各类文件之间“流动”,也就没必要天天重复复制、粘贴的工作了。

面对年复一年、日复一日烦琐的工作任务,我们需要反思,如何从无谓的事务中解脱出来?要多去想想平时的工作中还有哪些能够改善的地方,通过持续优化来改进工作方式,提高效率。要分解工作流程,将复杂问题简单化,简单问题程序化,能自动化的工作尽量自动化。要达到这样的能力,就要不断地去“充电”,不断学习新的技术。

下面介绍一些可以提升办公效率的软件和工具,例如批处理、VBA等。

1.批处理

批处理,顾名思义,就是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为.bat。这些命令统称为批处理命令。

批处理程序的强大之处就在于能够自动地、批量地完成大量重复性的工作,这将用户从那些简单却重复的管理任务中解放出来。通常来说,Windows下的文件与文件夹管理、系统性能优化、系统管理与维护、网络管理都可以用批处理轻松解决。

例如,我们需要创建100个文本文件,使用批处理非常简单,只需要下面这行代码。

for  /l %%i in (0, 1, 99)  do (echo 这是file%%i.txt文件  >  file%%i.txt)

其中/l指loop,表示循环;%%i从0变化到99,每次增加1;每循环一次,都要执行do函数里面的语句;echo命令表示将信息直接输出到文件中,格式为“echo信息 > 文件”,如果文件不存在就会创建一个新的文件,然后将内容写入其中。

我们看一下效果,打开记事本,新建文件,将上面这行代码输进去,如图1-6所示。

图1-6

执行菜单栏的“文件”→“另存为”命令,保存类型选择“所有文件(*.*)”,文件名为“创建100个文件.bat”,如图1-7所示。

图1-7

将文件保存后,我们看到,这是一个Windows批处理文件,如图1-8所示。

图1-8

双击该文件,系统自动运行并生成了100个文本文件,如图1-9所示。

图1-9

随机打开一个文件,可以看到里面的内容,如图1-10所示。

图1-10

又如,我们需要创建8个指定名称的文件夹,使用批处理非常简单,只需要下面这行代码。

for %%i in (A,B,C,D,E,F,G,H) do mkdir %%i

将其输入记事本,保存为“创建文件夹.bat”文件,双击运行即可,如图1-11所示。

图1-11

再举一个例子,我们需要一次性提取文件夹下面的所有文件名称,可以用下面这行代码。

DIR *.*  /B >file_list.txt

将其输入记事本,保存为“提取文件名.bat”文件双击运行以后,就可以得到file_list.txt文件。打开该文件就可以看到该文件夹下所有文件的列表,如图1-12所示。

图1-12

有时候,我们需要先在Excel中制作好批处理的命令,然后粘贴到记事本,最后另存为批处理文件。例如,我们有个任务是每个月初都需要按日期制作文件夹,则6月需要制作30个文件夹。

在批处理中创建文件夹使用“md文件夹名称”命令,我们在Excel中通过下拉操作批量生成了命令文本,如图1-13所示。

图1-13

将这两列复制到记事本,另存为“创建日期文件夹.bat”文件,并双击运行,结果如图1-14所示。

图1-14

文件重命名的语法是“ren旧文件名 新文件名”,我们对文件批量更名,也可以比照上面的方法生成命令,此处不再演示。总之,善于运用批处理,可以大幅提升工作效率。

2.Office与VBA

在工作中,我们基本每天都会使用Office办公软件,不能熟练应用必定影响工作效率。Microsoft公司出品的软件,往往体积庞大,功能全面,然而大量的用户只用到其中极少的功能。对于Word,大多数人只是用它完成打字工作,只有少数人会用于版面设计。PowerPoint主要是用于撰写工作总结报告,以及制作企业宣传或者产品宣传幻灯片。对于Excel,主要用于报表编制和复核、统计与计算汇总。其实,Excel功能强大而复杂,也有一些人将Excel用到出神入化的地步,可惜绝大多数人并没有去深入学习这些功能。如果利用好这些工具,工作效率还有非常广阔的提升空间。

熟练掌握Office办公软件是对我们最基本的要求之一,那么要熟练到什么程度呢?需要背诵一大堆快捷键,熟悉一些非常冷门的菜单操作吗?其实,有些快捷键由于不常用,记住了很快又会忘掉。单就追求效率而言,Word要了解邮件合并、通配符、域、样式,Excel要了解Vlookup函数、数据透视表,PowerPoint要了解母版。

在互联网的时代,已经没有必要记忆太多的东西。问题的关键在于如何提问,要能够把自己遇到的问题转化为普遍性问题,然后才能通过搜索引擎、专业论坛找到答案。初学者最大的问题往往是不能清晰地描述自己想要什么效果。同时,我们还要知道Office可以实现什么,不能实现什么,各种操作的局限性是什么。

熟记快捷键的“不足之处”是什么?那就是每次完成工作还是得“手动”敲击键盘。请牢记,手动操作是乏味的,而且容易出错。Office软件的特点就是所见即所得,文字和数据都“裸露”在外面,我们可以直接修改,改了马上就看得见,这个功能很好。但是,如果一不小心手指压了键盘,就会“误按键”造成错误,而我们可能根本没发现。我们经常会从新闻上看到,“Excel是世界上最危险的软件工具”“Excel公式错误引发世界经济危机”“Excel模型的错误导致了20亿美元的损失”……

出错不可怕,可怕的是没有发现错误。上面几条新闻中,错误潜藏在Excel公式里面,例如将正负号弄反了。一个工作簿嵌套多张工作表,满屏密密麻麻的单元格,很难逐个检查。手动打开表格,本身就容易因为误按键导致单元格数值变动。公式出错还好,至少有记录可查。但如果是通过快捷键操作,飞快地完成了汇总计算,我们根本无法复核。因为没有操作的步骤,没有每一步按键的记录。正确与否,没有人知道,只能换几个人各自重新做一遍,长此以往,会给大家留下“虽然很快但容易出错”“工作毛糙不可靠”等不良印象。在正式的工作场合,我们绝不能因为图快而丧失了准确性。所以,用快捷键操作表格并不是好的选择。

解决上述问题的办法就是流程化、自动化,将复杂的任务一步一步分解开来,然后将每一步都用程序完成。程序是有记录的,每一步都可以复核和验证。这样既保证了结果的可靠性,又能够重复使用。下一次遇到同样的问题,只需要点一下鼠标,程序将自动完成。如果需求有调整,只需要修改参数,再次运行一下就可以了。

例如,有一项任务是写数据摘要报告,数据是现成的,我们只需要进行汇总分析,然后形成Word格式的报告。这个工作在Excel和Word中手动做,对于熟练掌握Excel的人来说,大概要花20分钟。而如果编程来提取数据并对其进行分析,自动输出报告,大概要花一个小时。那么应该如何选择呢?

报告提交给了领导,各部门在会议上讨论报告,大家有了一些新的想法,需要修改部分内容,例如数据不应是环比而是同比、调整格式和字体等。如果手动完成,从修改数据源到重新写Word报告,还是要花20分钟。而且,手动修改报告是非常容易出错的。而如果当初用程序自动完成报告,整个逻辑是连贯的,这时候只需要修改参数就可以了。整个流程是自动化的,重新运行一次可能耗时不到一分钟。这种方式虽然从一开始花费了额外的时间和精力,但是从长远来看,它节省了更多时间。所以,有时候只有“慢下来”才能“快起来”。

从精通Excel到开始编程,VBA(Visual Basic for Applications)是常见的入门语言。VBA是Office软件附带的编程语言,进入编程环境非常容易,不需要单独安装。无论是专业的程序员,还是刚入门的普通用户,都可以利用VBA完成简单或复杂的需求。在商务办公环境中,VBA用得非常多。国内的ExcelHome论坛还有个VBA板块,里面有很多资深的VBA用户孜孜不倦地解答技术问题。

下面看一个实际的例子,我们需要根据Excel工作簿中的第一张模板表,批量生成本月日报表,如图1-15所示。

图1-15

按Alt+F11快捷键,打开VBA编辑器,双击左侧的“Sheet1(模板)”,右侧出现空白编辑区。写入下列代码,单击“运行”按钮,或者按F5键运行代码,如图1-16所示。

Sub 生成日报()
Dim i As Integer
Dim sht As Worksheet
For i=1 To 30
Set sht=Sheets.Add
sht.Name="6月" & i & "日"
Sheets("模板").Range("A1:B15").Copy sht.Range("A1")
Next i
End Sub

程序将自动生成30张工作表,如图1-17所示。

图1-16

图1-17

使用程序完成工作的好处就在于每一步都可以追溯,出了问题方便查找。而手动复制粘贴无法保证工作质量。

VBA也有缺点,即代码是和数据文件放在一起的。它的主要问题有3点:一是编写代码时候的误操作,很容易在不经意间就更改了数据;二是大量VBA代码写在Excel文档里面,打开Excel文档就会比较慢;三是有的时候宏病毒会感染数据文件,导致数据丢失。

所以,更好的做法是把程序和数据分开,程序文件归程序文件,数据文件归数据文件,各自修改,互不干扰。还有一点,商用开发通常不会用VBA,因为代码很容易被别人看到,即使是加密的,也很容易破解。

那么VBA过时了吗?其实所有的编程语言都有这类问题,“某某技术是不是过时了?”“A语言不如B语言”之类的话题层出不穷,也会引来激烈的争论。有的人会坚守一种技术,例如认为“Excel可以做这样也可以做那样”。

我们要明确一点,无论什么工具,都是为了完成工作。工具、技术各有特色,适用于不同场合,没有任何一项技术可以包打天下。技术无所谓优劣,只是适用性不同。我们要学会驾驭工具,而不能被工具束缚。

3.善用工作软件

要提升工作效率,就要善于使用优秀的办公软件。除了Office系列软件,我们日常工作中还常常会使用下列软件。

(1)Everything

这是一款本地文件搜索神器。每个人的计算机中都保存着大量的软件、音频、视频、照片、游戏、文档、电子书等文件。Everthing可以在瞬间从海量的文件中找到用户需要的文件。

(2)DocFetcher

这是一个桌面文档内容搜索引擎,它能遍历计算机中所有的文件文档内容,然后用户可以方便地对自己的计算机进行全文搜索。Everything只能搜索文件名而不能搜索文档的内容,如果想要搜索一份内容里带有“Python”字样而不知道文件名的文档,DocFetcher就派上用场了。这意味着用户不必再去记忆文件名,只要输入文件内容关键字即可搜索,主流的文档格式都能被索引和搜索。

(3)TotalCommander

这是一个功能强大的全能文件管理器,具有搜索、复制、移动、改名、删除、文件内容比较、同步文件夹、批量重命名文件、分割和合并文件、创建/检查文件校验(MD5/SFV)、压缩、解压等实用功能。

(4)Listary

这也是一款Windows文件资源管理器增强工具,可以快速定位文件、执行智能命令、记录访问历史、快速切换目录、收藏常用项目等。可以在任意文件资源管理器窗口通过键盘输入直接调用它在本目录下进行搜索,还可以用它搜索网页、打开应用程序、执行命令行等。

(5)Snagit

这是一款强大的截屏软件。它可以轻松抓取图像、文本和影音等多种内容形式,内置强大编辑器,捕捉、编辑一步到位。它在截图的时候,可以将其中的文字识别出来,这对于我们后期编辑很有用。

(6)按键精灵

这是一款模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替双手,自动执行一系列鼠标键盘动作。只要是用户在计算机前用双手可以完成的动作,按键精灵都可以替用户完成。

(7)TeamViewer

这是一个用于远程控制的应用程序。有了它,用户可以在路上用手机连接控制家中的计算机,在出差的时候用笔记本连接公司的计算机。设备建立连接后,TeamViewer就能够读取每一个设备的文件目录,可以轻松地把一个设备中任意目录的文件传输到另一个设备的任意目录当中。TeamViewer是远程办公利器,省去了来回跑的时间,效率自然提升了。

4.高效率的工作思维

(1)模板化

“不要重复造轮子。”邮件、报告、各类文书,如果每次都从零开始写,那就要花费很多时间。更好的办法是保存一份Word模板,然后将需要填充的内容写在Excel文档里面。每次需要时,只需要用Word软件的邮件合并功能,导入Excel文档中的数据,即可自动生成一份报告的草稿,然后在此基础上进行适当修改。

(2)批量化

批量化就是集中时间一次性完成大量重复的工作。我们常常将工作分散化,例如在上网找资料时喜欢边找边看。其实,这样既找不到多少资料,也看不了多少资料。不如一次性找齐所有的相关资料,然后关掉手机,集中精力阅读资料,一次性完成一批工作要比一个个做更快、更有效率。又例如,我们平时固定频率的会议很多,准备会议场地、在各场地间来回往返占用了很多时间。如果把各种会议集中到一起开,既能有效地控制每个会议的时间,大家在一起的时间足够长,又能有效地充分交流思想。

(3)自动化

手动重复步骤容易出错,而自动化使过程可重复且可靠。尽量将烦琐的工作留给计算机,本书将详细介绍如何让计算机来完成日常工作。

(4)注重时效

工作追求完美,追求细节,这是很好的习惯。但是时间消耗过长,到头来往往丧失了工作的意义。所以,时效性强的工作不必过于细致,一旦超过了截止时间,不管之前做得多么细致都毫无作用。

(5)定期清空

我们常常被工作压得不堪重负,进入思维的死胡同,这样会影响工作效率。我们需要定期清空,解放思想,不再专注于工作。花一些时间休息、思考、写日记、读好书、亲近大自然。这些活动能给我们带来新的视角、创意,让我们做起事来更有效率。

一些企业会有办公自动化平台、各种各样的“系统”,也有相应的IT部门来定制开发软件,那为什么我们还需要亲自学习编程语言呢?因为无论是企业内部的系统也好,外部的软件也好,都无法满足日常工作所有的需要。再优秀的软件,其功能都是固化的,无法考虑到全部的需求,而要增加新功能就需要等待作者升级。

我们有太多临时性的需求,例如,“汇总几千张表”“把所有Word文档中的logo删除”“上网搜集一下某某相关的资料”。这些需求太小了,还不值得IT部门专门为之开发一个完整的应用程序。或者问题不够大,还不足以引起决策部门重视。但是,它们有时候又非常关键,任务又很紧急。这种巨大的需求空白,给编程语言留下了生存空间,目前有大量Excel+VBA人才活跃在各个企业。随着互联网、大数据、人工智能的兴起,临时性需求变得越来越复杂,仅用VBA会有很多局限,而Python是填补这一空白的更好选择。

Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,它已经成为继Java、C++之后的第三大语言。Python是全能型编程语言,适用于系统运维、图形处理、数学处理、文本处理、数据库编程、网络编程、Web编程、多媒体应用、PYMO引擎、黑客编程、爬虫编写、机器学习、人工智能等领域。

选择一门语言,就是选择一个生态系统。Python已有30年历史了,它是目前世界上最流行、最易学的编程语言之一。用的人多,相应的解决方案就多,任何你能想到的需求都已经有人开发出解决包了。无论是数据分析,还是文档处理,抑或是图形图像处理,甚至是人工智能,大量的解决方案(也就是库)都是用Python语言写成的。Python语言赖以成名的地方就是它的第三方库,正是因为丰富的第三方库,Python才能实现丰富的功能。第三方库多了,用的人就会更多,这是一个良性循环。就这一点来说,Python比VBA适用性更广。都是从零开始学,为何不直接上手Python呢?事实上,VBA一点不比Python简单。

Python经常被称作“胶水语言”,它能够轻易地操作其他程序。例如,可以用Python调用VBA和批处理程序。前面介绍的几款效率工具,都可以用Python调用和操控,还可以将它们组合起来实现更强大的功能。Python还可以轻易地包装和使用其他语言编写的库,这样就可以把用不同程序语言写的东西粘在一起使用。例如,一个大型系统可以由多种语言编写,把这些不同的语言编写的模块打包,最外层使用Python调用这些封装好的包。

C#、Java更适合商业开发,用它们写大型软件更有效率,专业程序员用得多一些,它们的学习难度也要高一些。我们学习编程是为了提升工作效率,而不是要以编程为职业。安装C#或者Java的开发环境就已经很烦琐了,更不要说编写程序。与它们相比,Python更容易、轻巧、灵活,安装配置非常简单,占用空间也小,编写小型的脚本用它完全足够了。

要学习Python编程,首先要配置好编程环境。

Python在Windows、Linux和Mac三大平台都可以使用,本书以Windows操作系统作为开发平台。Python的安装有两种方式:一种是通过官方的安装包安装;另一种是通过Anaconda套件安装。

首先打开Python官网,进入Downloads栏目,下载Python安装包,如图1-18所示。

图1-18

Python这门编程语言活力很强,其版本更新非常快。总体来说,Python版本分为Python2和Python3两个大类,本书所有案例均使用Python3。Python3又细分了很多系列,如3.7、3.8,每个系列又有不同版本号,如3.7.0、3.8.3等,编号越大版本越新。在Python3里,不同版本之间的差别不是太大,新版本会增加个别特性,读者选择最新版安装就可以了。

要注意的是,针对不同的操作系统,每一个版本的Python都有不同的安装包。读者可以在Downloads栏目里面查找相应的版本和安装包。

如果是Windows64位操作系统,选择“Windows x86-64 executable installer”下载,如图1-19所示,下载后的文件为python-3.8.3-amd64.exe。如果是Windows32位操作系统,选择“Windows x86 executable installer”下载。

双击安装包,勾选“Add Python 3.8 to PATH”,单击“Install Now”开始安装,如图1-20所示。

图1-19

图1-20

安装完毕,打开计算机左下角的“开始”菜单,可以看到Python3.8文件夹,里面有4个子项目,常用的是前两个,如图1-21所示。

单击图1-21中的第2项“Python 3.8(64-bit)”,就进入了编程环境,可以看到Python的版本号Python 3.8.3,如图1-22所示。

图1-21

图1-22

IDLE是Python程序编辑器,它可以编写以及运行程序,但其功能过于简单,要编辑比较大的程序还需要安装更专业的编程工具。

Anaconda是一个专注于科学计算的Python开发工具,它自带常用的数据分析库,内置Spyder编辑器及Jupyter Notebook编辑器。Spyder是开发Python程序的编辑器,可以理解为IDLE编辑器的加强版,它除了可以编写及运行Python代码,还具有智能输入及程序调试功能。

进入Anaconda官网,如图1-23所示。根据操作系统型号选择合适的Python版本,下载后双击安装包,根据提示操作即可安装。

注意:Anaconda有不同的版本,对应的Python版本也不同。图1-23中显示的是Python 3.7版本,即该版本Anaconda内嵌的Python版本是Python 3.7.0。本书后续案例均有使用该版本Anaconda,对应的Python版本也是Python 3.7.0。

安装完毕以后,在“开始”菜单下的“Anaconda3(64-bit)”文件夹中可以看到常用的工具:Anaconda Navigator、Anaconda Prompt、Jupyter Notebook、Spyder等,如图1-24所示。

图1-23

图1-24

单击“Anaconda Navigator”,进入图1-25所示界面,可以单击各种图标下面的“Launch”按钮打开相应的编程工具。

单击“Anaconda Prompt”可以打开Anaconda Prompt命令窗口,界面类似于Windows的CMD命令窗口,在提示符下可以输入命令并按Enter键运行。

输入“conda --version”,按Enter键,将返回conda版本号,表明安装没有问题,如图1-26所示。

图1-25

图1-26

输入“conda update conda”,可以将conda更新至最新版本。

安装好编程工具后,下面就开始编程之旅。我们要让计算机在屏幕上输出“Hello,World!”,作为第一个程序。

前面我们通过官方安装包安装了Python3.8,打开“开始”菜单,在Python3.8文件夹中单击“Python3.8 (64-bit)”,进入交互式编程环境,如图1-27所示。

在提示符>>>后面输入print("Hello,World!"),然后按Enter键,屏幕上会输出“Hello,World!”,如图1-28所示。

图1-27

图1-28

这就是最简单的编程方式。但是它的缺点也很明显,当我们关闭窗口,代码也就消失了,无法保存和重复使用代码。

在>>>后面录入一段代码,按Enter键返回结果,然后再录入一段,再运行,不断人机互动,这就是交互式运行。Python程序有两种运行方式:交互式和脚本式。交互式运行简单,适合初学者学习或测试代码,但是缺点很明显,当我们关闭窗口,代码也就消失了,无法保存代码和重复使用。脚本式运行,是通过写一个脚本(.py结尾的文档),一次性实现全部代码。

使用命令窗口编程有个技巧,那就是使用快速编辑功能。在标题栏单击鼠标右键,选择“属性”,在打开的“‘Python 3.8(64-bit)’属性”对话框中勾选“快速编辑模式”,然后单击“确定”按钮,如图1-29所示。

图1-29

设置后,可以直接在编辑窗口中选择字符,然后单击鼠标右键,选择“复制”命令就能将选择的字符串复制下来。同时,可以在输入字符处单击鼠标右键,选择“粘贴”命令,实现字符串的粘贴。

打开“开始”菜单,在Python3.8文件夹中单击“IDLE(Python 3.8 64-bit)”,进入交互式编程环境,如图1-30所示。

图1-30

同样可以在提示符>>>后面输入代码print("Hello,World!"),按Enter键运行,如图1-31所示。

图1-31

在提示符>>>后面输入代码运行Python命令的方法比较简单灵活,但是当代码很长或很多时,输入整个代码块就会变成负担。一个错误就将导致整块代码需要重新输入。通常,当代码超过一定行数,就需要写到一个文件中,文件可以被方便地打开、编辑和运行。

使用IDLE可以新建、打开、保存代码文件。执行菜单栏的“File”→“New File”命令(或者按Ctrl+N快捷键),可以新建文件,输入代码,如图1-32所示。执行菜单栏的“File”→“Save”命令,将文件保存为1.py。

通过IDLE可以打开代码文件,选择“Run”→“Run Module”菜单命令(或者按F5键)运行代码,运行结果如图1-33所示。

图1-32

图1-33

IDLE可用于编写小型代码,对于大型开发项目,还是需要使用集成开发环境。

安装Anaconda以后,在“开始”菜单的“Anaconda3(64-bit)”文件夹中单击“Anaconda Prompt”,同样可以进入交互式编程环境。

在提示符>后输入“python”,按Enter键后可以看到Python的版本号,如图1-34所示。

在提示符>>>后输入代码“print('Hello,World!')”,按Enter键后会输出“Hello, World!”,如图1-35所示。

图1-34

图1-35

本书的大多数代码都是在这里完成的。

Jupyter Notebook是以网页的形式编程,可以编写代码和运行代码。网页文档保存为扩展名是.ipynb的JSON格式文件,方便与他人共享。

在“开始”菜单的“Anaconda3(64-bit)”文件夹中单击“Jupyter Notebook”,浏览器将会进入Notebook的主页面,如图1-36所示。

图1-36

单击“New”→“Python 3”,可以新建一个网页文档,文档由一系列代码单元(Cell)构成,代码单元左边有“In [1]:”这样的序列标记,方便查看代码的执行次序。单元格内就是编写代码的地方,可以在单元格内输入代码,单击“Run”按钮或者按Shift + Enter快捷键运行代码,其结果显示在单元格下方,如图1-37所示。

图1-37

Jupyter Notebook包含了交互式运行和脚本式运行的优点,既可以查看程序每一步运行的结果,也可以将代码和运行结果保存起来,特别适合初学者练习。单击“保存文件”按钮,文件将保存在默认的文件夹中,如图1-38所示。也可以单击文件名重命名文件。

图1-38

Spyder是使用Python进行编程的集成开发环境。

在“开始”菜单的“Anaconda3(64-bit)”文件夹中单击“Spyder”,启动Spyder进入主界面,如图1-39所示。

主界面左侧是Editor(编辑器),用于编写代码。右上方区域3个标签分别是帮助(Help)、变量管理器(Variable explorer)、文件管理器(File explorer),在变量管理器中可以查看代码中定义的变量,在文件管理器中可以查看工作目录内的文件;右下方是IPython console(控制台),可以看到编辑器中代码的运行结果,也可以直接在控制台中输入代码运行。

图1-39

例如,单击按钮新建文件,输入print("Hello,World!"),单击按钮保存代码文件,单击“运行”按钮或者按F5键,可以在右下方看到运行结果。

新建、打开、保存操作都要使用工作目录。在程序代码里面打开工作目录内的文件,不用添加文件完整路径,文件保存时自动存放在工作目录。在最上方地址栏可以临时修改工作目录,但是此操作重启Spyder会失效。

执行菜单栏的“Tools”→“Preferences”→“Current working directory”→“The following directory”命令,可以修改默认的工作目录,如图1-40所示。

拖曳区域会调整窗口的布局,执行菜单栏的“View”→“Window layouts”→“Spyder Default Layout”命令,可以恢复默认的布局。

我们可以将编辑区变换一下风格,例如要对程序代码进行着色,执行菜单栏的“Tools”→“Preferences”命令,在打开的对话框中进行以下设置,如图1-41所示。

图1-40

图1-41

在Spyder编辑器里对代码进行复制粘贴、设置缩进都非常方便。此外,它还有智能输入功能。

输入“p”,按Tab键,它会以下拉选项的方式列出所有可用备选项,包括内置命令、变量、函数、对象等。用户可以按↑↓键选择,按Enter键完成输入,如图1-42所示。

下面举的例子在后面的章节中会用到,这里提前介绍,初学者可以学习完后面的内容再来看此案例。

输入print函数后,它会提示函数的语法和参数,如图1-43所示。

图1-42

图1-43

输入“app.”后,它会以下拉选项的方式提示app对象的方法和属性,如图1-44所示。

输入对象的方法后,它还会提示方法的语法和参数,如图1-45所示。

图1-44

图1-45

Spyder编辑器还有强大的调试功能。在编辑器内输入代码,系统会随时检查语法,如果错误会在语句左方显示图标,将鼠标指针移动到图标上,就会提示错误信息。

示例中,报错是因为使用了未定义的变量a,如图1-46所示。

有的错误比较隐蔽,需要一段一段地运行代码来排查。我们在可能出现错误的代码位置后方设置断点,方法是在语句左侧快速双击,程序行左方会出现红点。然后单击按钮以调试模式执行程序,程序执行到断点就会停止。然后在右上方单击“Variable explorer”标签,查看变量值,通过分析变量值来查找错误原因,如图1-47所示。

在Spyder编辑器里,按住Ctrl键并向上或向下滚动鼠标滚轮,可以将字体变大或变小。

本书篇幅较长的代码文件,都是在Spyder编辑器里编写的。

图1-46

图1-47

我们也可以在Spyder右下方“IPython console”中直接输入代码运行,如图1-48所示。

IPython console非常人性化,我们在print后面输入问号“?”,按Enter键,它会跳出print函数的用法,它也有智能输入功能。

IPython console可以逐语句运行代码,也可以粘贴一段代码,按Shift+Enter快捷键运行,如图1-49所示。

图1-48

图1-49

在IPython console里,可以通过按Ctrl+Shift++快捷键将字体变大;按Ctrl+−快捷键使字体变小。

Python在代码格式方面与其他编程语言相差不大,但是也有它的独特之处,如大小写敏感、代码缩进、注释方式等。

在VBA语言中,ab、Ab、aB被认为是相同的。所有VB家族的成员(VB、VBS、VBScript、VBA以及更早期的Basic等)都是对大小写不敏感的。但是在Python里,它们是不同的。

编程时需要处理很多变量、函数和类,那么就需要给它们命名。理论上来说,取任何名字都是可以的。但是,为了便于程序阅读和维护,选择的名字还是要有一定含义,不能太简单(如a、b、c等)。例如,我们写了一个自定义函数,命名为doc2pdf,这样一看就知道它是将Word转为PDF的函数。

Python编程可以使用驼峰命名法(Camel-Case),即混合使用大小写字母来构成变量和函数的名字。驼峰命名法又分为小驼峰命名法和大驼峰命名法,前者常用于变量和函数名,后者用于类名。例如myFirstFunction,第一个单词小写,后面单词的首字母大写,这是小驼峰命名法;MyFirstFunction是大驼峰命名法。

其实,只要不违反命名规则、不使用程序关键字,怎么命名影响不大,只要能够识别每个单词、自己能看懂、交流无障碍就可以。例如my_first_function,用下划线分隔单词,这也是常见的命名方式。

注意,在Python语句中,标点符号都要用英文半角形式。

Python程序是由一行一行的代码组成的。每行代码都以换行符结束。

如果一行代码太长的话,可以用\扩展到下一行。如果一行中有多条语句,语句间要以;分隔。也就是说用;连接的两句代码是不同的行,而用\连接的两行代码属于同一行。

一个好的程序员必须为代码添加注释。例如,定义了一个函数,就要写清楚该函数的作用、参数的类型,方便别人阅读和维护。在Spyder编辑器中新建一个代码文件,会自动添加注释# -*- coding: utf-8 -*-,它指定了程序适用的字符编码。

以#开头的内容为注释,Python解释器会忽略该行内容。#后的这一行代码都不会运行。

有的注释比较长,占了多行,就可以使用多行注释。多行注释用3个单引号'''或者3个双引号''''''将注释引起来。

在Spyder编辑区输入下面的代码,如图1-50所示。

⓿ #下面是一个案例
❶ print("Hello,\
   World!")
❷ '''
   print("Hello, Python!")
   print("Hello, Python!")
   print("Hello, Python!")
   '''
❸ print("Hello, World!");print("Hello, World!")
❹ #print("Hello, Python!")

语句⓿是单行注释,不会被执行;语句❶结尾的\是续行符号,表示下一行的代码和本行代码是一行,要拼接起来运行;语句❷开始多行注释,从'''开始一直到下一个'''为止;语句❸中间有;,表示前后是两行代码;语句❹是单行注释,语句不会被执行。

图1-50

按F5键运行,右边控制台显示了运行结果,被注释掉的代码行都没有运行。

一个大型的代码文档往往分为不同的代码层级结构,每一层都有代码块。代码块从哪里开始,到哪里结束?很多编程语言采用花括号区分代码块,而Python则是以缩进来区分,这一点是需要特别注意的。因为在其他编程语言里面,代码缩进大多是为了美观而已。

在Python编程中具有相同缩进的代码被自动视为一个代码块,无论进行了几个空格的缩进都是被允许的,只要缩进空格的数量统一即可。我们通常以4个空格作为缩进量。

来看一段Python代码。

⓿ class Person:
❶      def __init__(self,name,age,like):
❷          self.name=name
❸          self.age=age

语句❶相比语句⓿有4个空格的缩进量,语句❷和语句❸相比语句❶有4个空格的缩进量。这样就保证了语句❷和语句❸处于同一层级。

以4个空格作为缩进量,输入比较烦琐,要不停地敲空格。所以,我们又常常使用Tab键代替空格键,但是这也经常造成麻烦。缩进是一种不可见字符,因此我们不知道缩进的是空格还是Tab键。不同编辑器对Tab键的处理不同,有时候Tab键可以作为一个空格,只是这个空格的宽度是常规空格的4倍。肉眼看上去缩进是一样的,然而实际上缩进是不同的。

由缩进导致的对齐问题非常普遍。图1-51所示的一段程序肉眼看上去第26行和第23、24、25行是对齐的。

但是,程序运行以后会报错,如图1-52所示。

图1-51

图1-52

我们把这几行代码粘贴到记事本,会发现第26行的缩进量的确不一样,如图1-53所示。

图1-53

我们可以在Spyder编辑器中通过设置把Tab键自动转换为4个空格,如图1-54所示。

有时候我们会在文本编辑器里写代码,然后粘贴到Spyder编辑器里。那么文本编辑器也要做同样的设置,把Tab键自动转换为4个空格,如图1-55所示。

图1-54

图1-55

但是有的编辑器(如记事本)无法这样设置,因此在编辑器之间粘贴代码的时候要特别小心,不要混用Tab键和空格。《PEP8:Python编码风格指南》和《Google开源项目风格指南》总结了常用的Python语言规范和风格规范,感兴趣的读者可以自行阅读,养成良好的开发习惯。

下面看一个代码块与缩进运行效果的例子。

案例:输出100次“Hello,World!”

我们学习Python编程,主要是为了完成烦琐而重复的事情。前面已经通过语句print("Hello,World!")在屏幕上输出了“Hello,World!”,如果需要输出100次呢?

事实上,我们不需要敲100次代码,只需要下面两行代码就可以实现(第二句前面有4个空格的缩进量)。

for i in range(100):
    print("Hello,World!")

在Spyder编辑器中输入代码,按F5键运行,会连续输出“Hello,World!”100次。如图1-56所示。

如果在程序后面添加一句print("Hello,Python!"),按F5键运行,就会交替输出“Hello,World!”和“Hello, Python!”,如图1-57所示。

for i in range(100):
    print("Hello,World!")
    print("Hello,Python!")

图1-56

图1-57

删除 print("Hello,Python!")前面的缩进空格,按F5键运行,屏幕输出“Hello, World!”100次,最后仅输出一次“Hello, Python!”。

for i in range(100):
    print("Hello,World!")
print("Hello,Python!")

实际上,这是一个简单的循环语句,i的取值范围是0~99,每次i取值都要运行后面的代码块内的语句。循环结束后,再继续运行后面的代码。

这是一个简单的案例,让我们既了解了缩进的作用,也看到了编程的威力。对于烦琐的工作,我们要找出其中相同的部分,找出变化的规律,将重复的劳动都用循环语句来完成。


相关图书

推荐系统:产品与算法解析
推荐系统:产品与算法解析
程序员的制胜技
程序员的制胜技
面向电子鼻的复合光气体传感方法
面向电子鼻的复合光气体传感方法
程序设计竞赛专题挑战教程
程序设计竞赛专题挑战教程
Serverless核心技术和大规模实践
Serverless核心技术和大规模实践
深入浅出Windows API程序设计:编程基础篇
深入浅出Windows API程序设计:编程基础篇

相关文章

相关课程