通过构建 Whatsapp 聊天分析器提升你的 Python 技能:一个指导项目
Whatsapp 聊天分析器构建路线图
在学习结束后寻找应用知识的方法,本质上意味着学习本身并没有明确的目标。我们所做的一切,只是尽可能地积累知识,希望它们能在某个遥远而神秘的未来派上用场。
这难道不感觉像是在拖延吗?
我相信一种将做项目放在首位的学习方法。
当你尝试做某事时,你会发现上百个你不知道的事情。你会发现一些你自以为知道但实际上并不了解的事情。你会被一些看似简单、甚至你根本没注意到的事情绊倒。你会填补你学习中的空白。
而且,它非常有趣和冒险!
只有完成一个项目才能获得所有这些。所以,我认为以完成一个项目为中心来学习是值得的。
如果您想深入构建一些有趣的东西并在此过程中学习有用的 Python/编程技能,那么本指南适合您。
通过本指南,我的目标是引导您构建一些有趣的东西,让您在构建过程中体验难以掌握的编程直觉,并让您从基本的 Pythonista 转变为高级 Pythonista。
最重要的是,我想给你动力和激励,让你自学。
您将学到什么
以下是您将学到的一些课本技能:
- 文件处理
- Python 中的字符串操作
- 功能
- 模块
- PiP 和使用第三方软件包
- Python 中的正则表达式 (RegEx)
但这不是一本教科书。因此,除了学习这些内容之外,你还会对良好的编程实践产生直觉,例如:
- 代码可读性和编码风格的重要性
- 何时以及如何将代码分解为函数
- 如何调试代码(当你想用头撞墙时)
- 如何在互联网上查找信息 - 使用 Google、使用 StackOverflow、阅读文档等。
- 了解不同数据结构的必要性以及何时使用什么
那我们就开始吧!
问:“好吧,我在建造什么?”😃
好的,想法是这样的:
当你和亲密的朋友聊天时,你是否想知道——
- 你们每个人发送的消息数量
- 你的平均消息长度
- 谁先发短信以及每次对话中第一个发的短信
- 您的聊天时间模式 - 每小时、每天和每月
- 最常分享的网站链接
- 你们每个人使用的最常用的词
如果您编写一个程序来为您计算所有这些东西,那不是很酷吗?!?
问:“但它真的有多酷吗?”😒
您的程序将会找到类似的结果并为您打印出来,而无需那些图表和视觉效果。
问:“太棒了!但我准备好了吗?”😳
“你所认识的每一位伟大的开发人员都是通过解决他们在真正解决之前没有资格解决的问题而取得成就的。”
— 帕特里克·麦肯齐
沿着这样的思路思考,我认为:
- 如果您了解Python 中的以下基础知识 - 变量、列表、字典、循环、条件、函数 - 那么您已经准备好了。
- 否则,如果您是Python 新手,但了解其他语言的基础知识- 请阅读这个快速 Python 教程,我想您已经做好准备了。
只需深入研究下面第一个与“hello world”类似的练习即可。如果你能完成,就说明你准备好了!
问:“那我该如何建造它呢?”😕
Whatsapp 允许您将任何聊天内容导出到文本文件中,如下所示 -
因此,您可以编写一个程序来读取该聊天文件,对其进行解析、分析并给出结果。
但这还不够帮助,对吧?
- 这就是为什么我写了这份简短的指南,让你像路线图一样遵循。我把构建任务分成了10个里程碑(MS),并针对每个里程碑你需要学习的内容写了一些小建议。把它当成学徒期来对待。
“好吧,那我们就这么做吧!”😃
Whatsapp 聊天分析器构建路线图
MS0:设置您的环境
刚开始的时候,你肯定不想花几个小时来设置环境。那样的话,你的一半动力就被扼杀了!对吧?
Repl.it是摆脱设置困扰的出路。
该网站提供几乎所有语言的在线 IDE,只需点击几下即可免费访问。对于像我们正在构建的这种小型项目来说,它非常实用。
MS1:保证一切正常(相当于“ Hello World! ”)
每本编程书籍/教程都以“Hello World!”程序开头。为什么呢?
除了欢迎新用户之外,该程序还能帮助学习者确保环境已设置好,一切正常。所以,只要她操作正确,程序也能正常运行!
考虑到这些目标,下面是与 Hello World 等效的程序:
打印
"I love you 3000"
……3000次!(有漫威粉丝吗? :p)
这是一个深入了解的好机会:
- 看看你是否准备好深入研究这个项目
如果没有,那就该学习一下 Python 的基础知识了。别担心,其实并不太难。
MS2:使用 Python 程序读取聊天文件
从这里开始,您将在每一章中构建一个项目的一部分。
该项目需要 2 个文件 -
- 您的 Whatsapp 聊天文件(以 结尾
.txt
) - Python 代码文件(以 结尾
.py
)
一旦你有了它们,第一章要求你使用 Python 程序打开聊天文件并打印其所有内容。
这是一个深入了解的好机会:
- 了解如何使用 Python 处理文件
Python 中的文件处理 - 从零到高手:
您知道,任何用于在计算机上打开文本文件的编辑器(记事本、VS Code、Vim 等)都是程序,对吗?
你知道吗?——你可以让你自己的 Python 程序做到这一点。几乎轻而易举!
通过Real Python 的这个优秀教程来学习 Python 中文件处理的概念。
MS3:功能 #1 和 #2 - 计算消息总数和单词总数
统计你和朋友之间交换的信息数量。然后,统计你们各自分享的信息数量和字数。打印结果。
这是一个深入了解的好机会:
- 理解 Python 中的字符串
关于 Python 中的字符串,需要记住的重要事项:
- 字符串被视为列表。因此你可以像这样进行搜索:
if "- Paridhi:" in chat_line:
counter+=1
-
Python 字符串之所以出名(与其他语言的字符串相比),是因为 Python 内置了丰富的方法库,你可以使用它们来操作它们。我建议你参考W3Schools 的这篇教程来学习这些方法。
-
Python 的切片和负索引字符串功能有时真的很方便!
注意:从现在开始,你会感觉到程序的大小和复杂性都在增长。随着这种情况的发生,你应该开始注意你的编码风格,并牢记代码的可读性。
编码风格和代码的可读性:
Brian W. Kerninghan 在他的《编程实践》一书中说道:
“风格的目的是使代码易于自己和他人阅读,良好的风格对于良好的编程至关重要。 ”
就我个人而言,每当我尝试决定代码的可读性时,我的脑海中就会浮现出Python 之禅的这句话:
明确优于隐含
以下是 3 条简单、可操作的规则,您可以牢记这些规则来养成良好的编码风格:
1. 仔细考虑变量的名称
我发现 Brian W. Kerninghan 的建议真的很有帮助:
- 全局函数、类和结构应该具有描述性名称,以表明它们在程序中的作用。
- 相比之下,局部变量的名称较短就足够了;在函数内,
n
可能就足够了,npoints
没问题,但numberofPoints
不会过度。 - 常规使用的局部变量名可能很短。循环索引使用
i
和,指针使用和,字符串使用和 的情况非常常见,因此使用较长的名称几乎没有好处,甚至可能有些不妥。j
p
q
s
t
2. 必要时使用函数
- 将长代码分解成函数
- 不要重复自己(DRY)——使用函数删除重复的代码片段
下一章将详细介绍函数。
3. 撰写有用的评论
- 注释的目的是帮助程序的读者理解。注释的帮助不在于重复代码中已经明确表达的内容,也不在于与代码相矛盾,也不在于用复杂的排版显示来分散读者的注意力。
- 尽可能编写易于理解的代码;你做得越好,所需的注释就越少。好的代码比坏的代码需要更少的注释。注释充其量只是必要之恶。
- 不要与代码相矛盾。大多数注释在编写时都与代码一致,但随着错误的修复和程序的演进,注释往往会保留其原始形式,从而导致与代码不一致。
最后,请记住,编程风格的原则是基于经验指导的常识,而不是任意的规则和规定。
MS4:功能 #3 - 计算各方发送消息的平均长度
现在,您已经使用两个指标(消息数量和字数)计算出了您的个人份额,您可以用它来计算每个人的平均消息长度。打印结果。
这是一个深入了解的好机会:
理解函数的本质是:
- 减少重复
- 使代码更具可读性
深入探讨使用函数的动机和风格:
重复可能是软件中所有弊端的根源。函数是最早被开发出来控制这种弊端的技术之一。
编写函数的语法很容易理解,但需要练习并掌握一些设计感,才能学会何时将代码拆分成函数。设计函数的一个目标是,在将程序扩展到新用例时,确保它们可以复用。
还有什么?做出这样的设计选择正是编程的乐趣所在!
以下是Bob Martin 的《代码整洁之道》一书中提出的 3 条启发式方法,它们将指导您做出此类选择:
- 函数应该小;小到什么程度?不超过一屏或二十行
- 函数应该有描述性的名称。函数越小、越集中,选择一个描述性的名称就越容易。不要害怕名字太长。一个长的描述性名称比一个简短难懂的名称更好。一个长的描述性名称比一个长的描述性注释更好。
- 函数应该只做一件事,并且没有“副作用”——它的目的应该从名字就能清楚地表达出来
第一次编写函数时,它可能会显得冗长复杂,并且不符合上述任何规则。这没关系。您可以稍后改进并重新格式化代码。我认为没有人能够从一开始就编写遵循上述所有规则的函数。
记住,这些是你需要努力实现的功能构建目标。别让它们阻碍你。
MS5:功能 #4 - 计算第一条文本的数量并显示它们
你想彻底解决“谁先发短信”的问题吗?😜
完成这个里程碑后,你就能做到。你会清楚地知道你们各自发起了多少次对话,并拥有一份关于这些第一条短信的清单。把这些都打印出来。
这是一个深入了解的好机会:
- 理解模块——你需要 Python 的
time
模块 - 学习如何查找和阅读文档
注意:不要被文档吓到。他们是你的朋友。
什么是模块?
每个以 .py 扩展名结尾的 Python 源代码文件
都是一个模块。
Python 安装时附带一个标准库,其中包含此类开箱即用的模块。这些都是非常有用的代码,您无需编写!
MS6. 功能 #5 - 聊天时间模式 - 每小时、每天和每月
现在,是时候找出您通常的聊天模式了。
- 一天中你什么时候聊天最多?其他时间呢?
- 一周中哪天你们聊天最多?其他日子呢?
- 你们哪个月聊得最多?其他月份呢?
打印结果。
这是一个深入了解的好机会:
- 了解存储所有这些数据所需的不同数据结构,并思考如何设计一个满足您需求的数据结构
注意:您将需要time
再次使用该模块。重要的是,如果您不记得了也没关系;您可以使用 Google 并根据需要多次查阅文档。
注意:实现这一点可能相当棘手。你很可能会把大部分的编程时间都花在解决错误代码上。
记住:“问题不在于电脑,而在于你的代码。” :)
如何调试代码:
- 向朋友解释代码或使用“橡皮鸭技术”
- 选择一个朋友(或一只小黄鸭)
- 打开有问题的代码,一行一行地、慢慢地、耐心地向他(她/它)解释
- 无需朋友(或鸭子)的帮助,问题就出现在你面前,就像变魔术一样!
- 添加打印语句

虽然添加这样的打印语句并非正确的调试方式,但我发现它们有时非常有效。尤其是当我使用像 VIM 这样的文本编辑器,而不是使用带有调试器的完整 IDE 时(或者当你懒得学习如何使用调试器时 :p)。
但我不得不说,一旦你学会了如何使用 IDE 调试器,就没有回头路了。
- 使用 IDE 调试器
截至撰写本文时,repl.it 尚未完全支持调试器。我最喜欢的支持调试器的 Python IDE 是 PyCharm 或 VS Code。
调试器非常有用,我建议你切换到调试器并学习如何使用它。相信我,这绝对值得!(尤其是现在,你的代码已经相当复杂了。)
个人建议:我使用“IDE 调试器”是因为 Python 在标准库模块 -*** 中提供了一个调试器pdb
- 我建议您现在不要使用它。
MS7. 功能 #7 - 最多共享的网站
这是一个深入了解的好机会:
- 学习正则表达式
- 将 Python 字典理解为传统的哈希表:从网站名称到出现次数的映射
RegEx 快速入门
正则表达式是用于描述搜索模式的特殊文本字符串。
你可能熟悉通配符,例如*.txt
在文件管理器中查找所有文本文件。你可以把正则表达式想象成强化版的通配符。
“我想要位于或和其后第二个字符串(如果存在)之间的每个字符串。否则,我想要第一个。
"http://"
"https://"
/
/
”
以下是一些学习正则表达式的热门资源:
- RegexOne - 学习 RegEx 的交互式教程
- Python 中的正则表达式简介
- Python 的文档- 它将其称为“嵌入在 Python 内部的微型、高度专业化的编程语言”。
MS8. 功能 #8 - 最常用的单词
我会让你自己解决这个问题!
MS9. 将以上所有内容打印在漂亮、整洁的表格中
您肯定使用了一些打印语句来打印每个里程碑的结果。现在,是时候专注于这些结果的呈现了。请将所有上述结果打印到美观整洁的表格中。
为此,您可能需要重构大部分代码,以便将打印语句与函数定义分离(假设您还没有这样做)。
这是一个深入了解的好机会:
- 意识到人们建议“函数应该只做一件事”的含义
- 学习搜索、安装和使用 Python 强大而活跃的社区通过以下方式提供的第三方模块
pip
- 通过设计表格的方式为项目增添个性化色彩!
Python 丰富的开源、第三方软件包生态系统的快速入门
Python 的生态系统贡献者众多,从个人开发者到 Facebook、Google 这样的巨头公司(真是个丰富的生态系统,不是吗?:p)。他们提供各种模块和代码库,用于网站建设、数值编程、游戏开发、数据科学、机器学习、深度学习,以及打印漂亮的表格。
现在,您不需要编写大量代码了!
PyPi是所有这些第三方 Python 软件包的所在地。您可以在这里找到每个开源第三方软件包的页面。
以下几点可以帮助您快速使用 PyPi:
- 您可以使用简单的终端命令 - 来安装每个软件包
pip
。您可以在 PyPi 的软件包页面上找到您需要输入的确切内容。
pip install tabulate
- 任何好的软件包在 PyPi 的页面上都有如何使用指南(或文档)
- 即使是新手也可以将他们的实验性软件包发布到 Python。使用前务必谨慎;它们可能不完整或无人维护。您可以查看软件包
Release History
或其 Github 统计信息,以确定其可信度。
MS10:使所有这些功能适用于群聊文件
完成这一里程碑后,你将把程序扩展到一个新的场景——群聊。在此之前,你只有一个与好友私信的聊天文件。现在,你需要修改程序,使其也能兼容 Whatsapp 群聊文件。
这是一个深入了解的好机会:
- 评估你的函数。你能复用其中至少一部分吗?
- 感受良好的编码风格和良好的编程实践带来的好处
- 了解版本控制系统的重要性并学习 Git
好软件
记住 Brian W. Kerninghan 在他的《编程实践》一书中关于优秀软件的说法会对你大有裨益:
优秀软件的基石是简单性,它使程序简短且易于管理;清晰性,确保程序易于理解,无论是对于人类还是机器而言;通用性,这意味着它们可以在各种情况下良好运行,并能随着新情况的出现而很好地适应;自动化,让机器为我们完成工作,将我们从单调的任务中解放出来。
好了,希望以上内容对你有所帮助。一旦你真正开始动手做这个项目,你就能真正理解本指南中的所有小课程。
这里有一些代码可以助您一臂之力:
不要害怕开始,因为当你陷入困境时,事情会变得困难。这就是冒险;每次你成功摆脱困境,都会感觉超级棒。
另外,您可以在Build To Learn Slack 小组中向我或您的同学询问您的疑问。
最后,我希望您在从事这个项目(或任何其他编程项目)时记住 Jen Simmons 的话:
Whatsapp Chat Analyser 是我在“ Build To Learn”系列上一篇文章中提到的 20 个很酷的编程项目之一。如果你想让我为其他项目制作类似的指南,欢迎在下方评论或直接联系我!
订阅“Build To Learn”时事通讯,当我发布新指南和文章时,您将收到电子邮件。
您可以通过Twitter和LinkedIn联系我。
文章来源:https://dev.to/nityeshaga/advance-your-python-skills-by-building-a-whatsapp-chat-analysisr-a-guided-project-6p9