Python学习与应用全攻略
1. 开启Python探索之旅
恭喜你,已经具备了用Python完成许多惊人事情的基础,现在真正有趣的探索之旅才刚刚开始!学习Python的最佳方式是解决实际问题。即便刚开始写的代码可能不够美观或高效,但它是有用的。若觉得没有Python能解决的问题,不妨挑选一个感兴趣的流行模块,围绕它创建自己的项目。
Python强大的原因之一在于其活跃的社区。如果你认识正在学习Python的人,不妨伸出援手。因为只有当你能向他人解释清楚一个概念时,才意味着你真正掌握了它。
如果你对网页开发感兴趣,可以深入学习更高级的Python网页开发课程,如Python网页开发和Django高级网页开发。当你准备好时,还可以参与GitHub上的开源项目。若你喜欢解谜,不妨尝试解决Project Euler上的数学挑战或Python Challenge系列谜题。你也可以报名参加Udacity的免费CS101课程,学习如何用Python构建基础搜索引擎。
在学习过程中遇到困难很正常,要相信肯定有人之前遇到过同样的问题并可能已经解决了。你可以在网上搜索答案,特别是在Stack Overflow上,或者加入Python社区寻求帮助。实在没办法时,试试
import this
,花点时间感悟Python的魅力。
2. Python安装指南
2.1 检查当前版本
-
Mac和Linux
:自10.4版本起的所有Mac OS X系统和大多数Linux发行版都预装了Python 2.7.x的最新版本。你可以打开终端,输入
python进入Python解释器来查看版本,输出示例如下:
$ python
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
若版本低于3.5,请下载最新版本。
2.2 安装Python
- Mac :需要Python 3.5+版本。若需下载新版本,可下载3.5.1的最新安装程序,下载后双击文件进行安装。
-
Linux
:
- 如果你使用的是Ubuntu、Linux Mint或其他基于Debian的系统,在终端输入以下命令安装Python:
$ sudo apt-get install python3.5
- 也可以直接从Python官方网站下载压缩包,下载后运行以下命令:
$ tar -zxvf [mytarball.tar.gz]
$ ./configure
$ make
$ sudo make install
若遇到问题或使用的是其他Linux发行版,可以使用包管理器或在网上搜索适合你系统的安装方法。
-
Windows
:
- 从Python官方网站下载Python 3.5.1,Windows版本以MSI包形式分发。下载后双击启动安装程序,按提示完成安装,默认安装路径为
C:\Python35
。
-
测试安装
:打开命令提示符,输入
\Python35\python.exe
并回车,若看到类似以下输出,则表示安装成功:
Python 3.5.1 (v3.5.1:37a07cee5969, ...) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
表示你已进入Python解释器,可以交互运行Python代码。输入
exit()
并回车可退出解释器。
-
添加环境变量
:为了方便运行Python脚本,需要将Python添加到系统的PATH环境变量中。下载的是Python 3.5.1版本,需要添加以下目录到PATH:
C:\Python35\
C:\Python35\Scripts\
C:\PYTHON35\DLLs\
C:\PYTHON35\LIB\
打开PowerShell,运行以下命令:
[Environment]::SetEnvironmentVariable("Path",
"$env:Path;C:\Python35\;C:\Python35\Scripts\;
C:\PYTHON35\DLLs\;C:\PYTHON35\LIB\;", "User")
- **验证安装**:打开新的终端,输入`python`,若看到正确的版本信息,则表示安装和配置成功。若安装了多个Python版本,可能需要使用`python3`。
3. 正则表达式基础
正则表达式(也称为regex、regexp或RE)是用于快速查找和提取文本模式的强大工具。它并非Python独有,而是一种通用的编程概念,可用于多种编程语言。正则表达式有自己独特的语法,虽然难学但非常实用。掌握后,你可以用简洁的语法在文本中查找复杂模式。
3.1 基本语法
正则表达式的基本思想是将普通文本与一些“特殊”字符结合,这些特殊字符用于表示不同类型的模式。例如,星号
*
表示前面的字符出现零次或多次。以下是一些基本示例:
| 表达式 | 描述 | 匹配示例 |
| ---- | ---- | ---- |
| a | 匹配字符“a” | a |
| happy | 匹配整个单词“happy” | happy |
| h.ppy | “.”匹配任意单个字符 | happy, hippy |
| ha
ppy | “
”匹配零个或多个“a” | hppy, happy, haaappy |
| us|them | “|”使用OR匹配“us”或“them” | us, them |
你可以查看Python官方文档了解所有特殊字符,或参考PyRegex获取简洁版本说明。
*
特殊字符类似于文件搜索中的通配符,
|
特殊字符与Python中的
or
作用相同,还可以使用括号来指定某些模式的优先级。
3.2 何时使用正则表达式
一般原则是,除非绝对必要,否则优先使用Python的基本字符串匹配方法,如
find()
和
replace()
,它们更容易理解。即先从内置函数开始,若代码变得过于复杂,再考虑使用正则表达式。
例如,当我们明确知道要查找的内容时,可以使用基本的Python函数:
str = 'Explicit is always better than implicit.'
print(str.replace('always', 'much'))
输出:
Explicit is much better than implicit.
但如果要处理复杂的模式,如标准化电话号码列表:
import re
phone_list = [
"555-555-5555","555 555 5555","555.555.5555",
"555.555.5555","555.555-5555","555/555/5555"
]
pattern = r'\D'
for phone in phone_list:
phone_num = re.sub(pattern, "-", phone)
print("Phone Num: ", phone_num)
使用正则表达式可以更简单地解决问题。判断何时使用正则表达式而非
find()
和
replace()
的另一个好方法是,当正则表达式满足以下条件时:
1. 更容易理解;
2. 表达清晰、简洁的意图;
3. 更短且易于修改和调整。
4. 正则表达式函数
4.1 re.match()和re.search()
re.match()
和
re.search()
是
re
模块中最常用的查找文本的函数。
-
re.match(pattern, string)
:仅在字符串开头搜索匹配项。
-
re.search(pattern, string)
:在字符串的任意位置搜索匹配项。
在查看示例之前,我们会使用
group()
进一步分离匹配文本的部分,通过在表达式中使用括号来指定组。
示例1 :
import re
text = "easier said than done"
# re.match
find_match = re.match(r'done', text)
if find_match:
print("Found: {}".format((find_match).group()))
else:
print("Not found.")
# re.search
find_match = re.search(r'done', text)
if find_match:
print("Found: {}".format((find_match).group()))
else:
print("Not found.")
输出:
Not found.
Found: done
示例2 :
import re
text = "My name is Inigo"
m = re.match(r'(.*) name (.s) .*', text)
if m:
print("group(0):", m.group(0))
print("group(1):", m.group(1))
print("group(2):", m.group(2))
else:
print("Sorry. No match!!")
输出:
group(0): My name is Inigo
group(1): My
group(2): is
分析正则表达式:
-
.*
:匹配零个或多个任意字符。
-
name
:匹配整个单词“name”。
-
.s
:匹配任意单个字符,然后是字符“s”。
组的定义:
- 组0定义了整个正则表达式匹配的字符串。
- 组1和组2表示子组(由括号内的内容定义)。
示例3 :
import re
string = "Inigo Montoya"
m = re.match(r"(?P<first>\w+)\W+(?P<last>\w+)", string)
if m:
print("group(0):", m.group(0))
print("group(1):", m.group(1))
print("group(2):", m.group(2))
print("")
print('group("first") : ', m.group("first"))
print('group("last") : ', m.group("last"))
else:
print("Sorry. No match!!")
这里我们定义了组名,使组更易于阅读。
4.2 re.sub()
re.sub()
用于搜索和替换文本,语法为
re.sub(pattern, replacement, string, max=0)
。该函数会替换特定模式的所有出现,除非提供了正的
max
值。
示例 :
import re
text = "Real Python teaches programming and web development through hands-on, interesting examples."
pattern = re.sub("hands-on", "practical", text, 0) # no max; replace all
print(pattern)
输出:
Real Python teaches programming and web development through practical, interesting examples.
5. 正则表达式更多练习
5.1 问题1
import re
validation = re.compile(r'[A-Za-zs.]')
name = raw_input("Please enter your name: ")
while not validation.search(name):
print "Please enter your name correctly!"
name = raw_input("Please enter your name: ")
print("\nYour name is {}!".format(name))
要求:
1. 阅读Python官方文档中关于
re.compile
函数的内容,用自己的话描述如何使用它以及为什么要使用它。
2. 多次运行程序,测试验证和未验证的输入。
3. 重构程序,确保输入是电子邮件地址:测试字母数字文本、“@”符号、另一个字符串、句点和结尾的“com”的存在。
4. 奖励:允许其他域名,如com、org、edu或net。
5.2 问题2
打开
phone_list.py
文件,其中包含一个字典列表:
data = [
{'name': 'Debra Hardy', 'phone': '(140) 732-2619'},
{'name': 'Claudia Baker', 'phone': '(833) 362-0448'},
{'name': 'Justin Lara', 'phone': '(609) 832-1565'},
{'name': 'Judah Battle', 'phone': '(199) 834-7433'},
{'name': 'Florence Nielsen', 'phone': '(769) 666-4576'},
{'name': 'Orlando Kirby', 'phone': '(618) 110-3675'},
{'name': 'Tucker Webb', 'phone': '(990) 295-9494'},
{'name': 'Abel Jacobs', 'phone': '(840) 537-3516'},
{'name': 'Ann Crane', 'phone': '(345) 876-2223'},
...
]
编写一个名为
phone-book-fun.py
的Python脚本,查找所有姓氏为“Hardy”或名字以字母J开头的人,并输出他们的名字、姓氏和电话号码。
6. 正则表达式作业
6.1 数据清理作业
使用Sublime Text(或支持正则表达式的文本编辑器),结合正则表达式,将
_sloppy_data.tsv
转换为
_clean_data.tsv
。
sloppy_data.tsv
是一个包含不必要空行和空格的制表符分隔值(TSV)文件,在旧版本的Microsoft Excel中难以正确打开。虽然只有二十行,但假设它有20,000行,手动修复会很麻烦,因此使用正则表达式自动化处理。需要进行以下更改:
1. 移除空行。
2. 移除每行开头的空格。
3. 移除方括号内的数字(如
[1]
)。
4. 移除第一列数字。
5. 移除
Inc.
、
, Inc.
、
Inc
和
Incorporated
。
6. 移除区号
(XXX)
和电话号码
XXX-XXXX
之间的空格。
在开始作业之前,先看一个简单示例。在文本编辑器中添加“N.Y.C”到空白文件,使用正则表达式将“N.Y.C”替换为“NYC”。在Sublime Text中,点击“查找”然后“替换”,在“查找”字段输入正则表达式
\.
,“替换”字段留空,激活正则表达式搜索,然后点击“全部替换”。这里使用
\.
而不是
.
是因为
.
在正则表达式中是特殊字符,需要使用反斜杠转义。
6.2 复习作业
-
复制以下代码并保存为
regex_review.py。 -
运行文件,所有
print语句将返回False。 -
修改变量,使所有
print语句返回True。
zero = "Real Ruby"
one = "5/25/14"
two = "A99 9AA"
three = r''
four = "6.76"
five = ["happy","birthday"]
six = r'\.(doc)$'
seven = "My email is michael@mherman.org"
# DO NOT CHANGE ANYTHING BELOW THIS LINE #
# -------------------------------------- #
print("zero: {}".format(zero == re.search(r'[P].*', "This is Real Python").group()))
print("one: {}".format(one == re.search(r'\d{1,2}\/\d{1,2}\/\d{4}', "5/25/2014").group()))
print("two: {}".format(two == re.match(
r'[A-Z]([A-Z](\d{1,2}|\d[A-Z])|\d{1,2})\s\d[A-Z]{2}',
"A88 8AA",
re.VERBOSE
).group()))
print("three: {}".format(bool(re.search(three, "B4c r79").group())))
print("four: {}".format(bool(re.search(r'\$[0-5]\.\d\d', four))))
print("five: {}".format(bool(re.search(r'\ha{4,10}ppy\b', five[0]))))
files = ['test.doc', 'test.odt', 'test.ddt', 'doc', 'testodt', 'test.doc']
matched_files = [file for file in files if re.search(six, file)]
print("six: {}".format(len(matched_files) == 3))
email_regex = r'\w+@\w+\.(com|org|edu|net)'
text = "My email is michael@mherman.org"
redacted_text = re.sub(email_regex, '(email redacted)', text)
print("seven: {}".format(seven == redacted_text))
通过以上学习和练习,你可以更深入地掌握Python和正则表达式的使用,解决各种实际问题。希望你在学习过程中不断探索,享受编程的乐趣!
Python学习与应用全攻略(续)
7. 正则表达式学习总结与拓展
正则表达式在Python编程中是一个强大且实用的工具,但同时也具有一定的复杂性。在学习和使用正则表达式时,我们需要不断地实践和总结,才能更好地掌握它。
7.1 学习要点回顾
-
基本语法
:要牢记各种特殊字符的含义和用法,如
*(匹配零个或多个前面的字符)、.(匹配任意单个字符)、|(逻辑或)等。通过组合这些特殊字符和普通文本,可以构建出各种复杂的模式。 -
函数使用
:
re.match()、re.search()和re.sub()是最常用的正则表达式函数。re.match()从字符串开头匹配,re.search()在整个字符串中查找匹配项,re.sub()用于替换匹配的文本。 -
组的概念
:使用括号
()可以定义组,方便提取和处理匹配的部分。还可以为组命名,提高代码的可读性。
7.2 拓展学习建议
- 阅读官方文档 :Python官方文档是学习正则表达式的权威资料,其中包含了详细的函数说明和示例。通过阅读文档,可以深入了解每个函数的参数和用法。
- 在线练习平台 :有许多在线平台提供正则表达式的练习题目,如Regex101等。在这些平台上,你可以实时测试自己编写的正则表达式,查看匹配结果,并获得反馈和提示。
- 参与开源项目 :在GitHub等开源平台上,有很多使用正则表达式的项目。参与这些项目的开发和维护,可以学习到其他开发者的优秀实践和经验。
8. Python学习路径规划
学习Python是一个长期的过程,需要有明确的学习路径和目标。以下是一个适合初学者的Python学习路径规划:
8.1 基础入门
- 学习Python语法 :掌握Python的基本数据类型(如整数、浮点数、字符串、列表、元组、字典等)、控制结构(如if语句、for循环、while循环等)和函数定义。
- 实践小项目 :通过完成一些简单的小项目,如计算器、猜数字游戏等,巩固所学的语法知识。
8.2 进阶学习
- 学习面向对象编程 :了解类、对象、继承、多态等面向对象编程的概念,并学会使用Python实现面向对象的程序。
-
掌握常用模块
:学习Python的标准库和第三方库,如
os、sys、re、requests、pandas等,提高编程效率。
8.3 专业领域深入
- 网页开发 :学习Django、Flask等网页开发框架,构建动态网页应用。
- 数据科学 :掌握NumPy、SciPy、Matplotlib等数据处理和可视化库,进行数据分析和机器学习。
-
自动化测试
:学习
unittest、pytest等测试框架,编写自动化测试代码。
8.4 持续学习与实践
- 关注技术博客和社区 :关注Python相关的技术博客和社区,了解最新的技术动态和发展趋势。
- 参与开源项目和竞赛 :通过参与开源项目和竞赛,与其他开发者交流和合作,提升自己的技术水平。
9. Python学习资源推荐
除了上述提到的官方文档和在线练习平台外,还有许多其他的学习资源可以帮助你更好地学习Python:
9.1 书籍
- 《Python编程:从入门到实践》:适合初学者,以项目驱动的方式介绍Python编程。
- 《Python核心编程》:内容全面,深入讲解Python的核心概念和高级特性。
- 《流畅的Python》:注重Python的高级用法和最佳实践,适合有一定基础的开发者。
9.2 在线课程
- Coursera :提供了许多Python相关的课程,如《Python for Everybody》、《Applied Data Science with Python》等。
- Udemy :有大量的Python课程可供选择,涵盖了从入门到高级的各个层次。
- 慕课网 :国内知名的在线学习平台,提供了丰富的Python课程和实战项目。
9.3 社区和论坛
- Python官方论坛 :是Python开发者交流和讨论的官方平台,有许多专业的开发者分享经验和解决问题。
- Stack Overflow :是一个全球知名的编程问答社区,你可以在这里找到各种Python相关的问题和答案。
- 知乎 :国内的知识分享平台,有很多Python相关的话题和讨论,可以从中获取不同的观点和建议。
10. 总结与展望
通过本文的介绍,我们了解了Python学习的多个方面,包括学习方法、安装配置、正则表达式的使用、学习路径规划和资源推荐等。希望这些内容能够帮助你更好地学习和掌握Python。
在未来的学习过程中,要保持积极的学习态度,不断实践和探索。Python作为一门功能强大、应用广泛的编程语言,在数据科学、人工智能、网页开发等领域都有着广阔的应用前景。相信通过不断努力,你一定能够成为一名优秀的Python开发者,实现自己的职业目标。
以下是一个简单的mermaid流程图,展示了Python学习的基本流程:
graph LR
A[基础入门] --> B[进阶学习]
B --> C[专业领域深入]
C --> D[持续学习与实践]
总之,学习Python是一个充满挑战和乐趣的过程。只要坚持不懈,不断积累和提高,你一定能够在Python的世界中取得优异的成绩。祝你学习顺利!
Python学习与正则表达式应用
超级会员免费看
995

被折叠的 条评论
为什么被折叠?



