Python 的实用离不开其强大的库或框架的支持,像正则表达式,文件模块,命令行模块, Django 框架, sk-learning 工具箱等.这些都让 Python 能够非常方便的处理不同领域的问题。
正则表达式
初学 Python,对 Python 的文字处理能力有很深的印象,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。关于 Python 里面正则表达式的使用网上有很多博文,如 Python正则式学习笔记等,这里做一下自己的总结.
基本使用
-
match 方法
import re str = 'an example word:cat!!' match = re.search(r'word:\w\w\w', str) # If语句紧跟来检验search()是否成功 if match: print 'found', match.group() ## 找到cat else: print 'did not find'
-
findall 方法
import re # 在字符串中查找 str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' # 找出str中所有的正规的邮箱 emails = re.findall(r'[\w\.-]+@[\w\.-]+', str) ## ['alice@google.com', 'bob@abc.com'] for email in emails: print email # 在文件中查找 f = open('test.txt','r') strings = re.findall(r'pattern',f.read())
基本模式
普通字符
a-z,A-Z,0-9
.
匹配任何一个单字符,除了换行符\n
\w
匹配字母/数字/下划线,等价于[a-zA-Z0-9]
,\W
与\w
互为补集\b
匹配词和非词的分隔界限\s
匹配单个空格字符,等价于[ \n\r\t\f\v]
.\S
和\s
互为补集\t\n\r
匹配制表符,换行符,回车符\d
匹配数字,等价于[0-9]
^ $
^
匹配开头,$
匹配结尾
重复模式
-
+
匹配至少有一个和左边相同的字符构成的串.egi+
匹配 i/ii/iii 等 -
*
匹配 0 个或多个和左边相同的字符构成的串.egi*
匹配 /i/ii/iii 等 -
?
匹配 0 个或一个和左边相同的字符.egi?
匹配 /i注意:
+
和*
都是尽可能多的匹配字符串
特殊符号
[]
代表单个字符,这个字符是属于[]
中的元素()
()
中匹配的字符串构成的一个 group,可以通过 match.group(i) 提取第 i 个组合
课后习题
文件模块
-
模块支持
import os import shutil
-
常用函数
# 获取文件列表 filenames = os.listdir(dir) # 拼接文件路径 os.path.join(dir,filename) # 获取绝对路径 os.path.abspath(path) # 从完整路径中获取目录和文件名 os.path.dirname(path) os.path.basename(path) # 判断完整路径是否存在 os.path.exists(path) # 创建目录 os.mkdir(dir_path) # 创建路径上的所有文件夹 os.makedirs(dir_path) # 拷贝文件 shutil.copy(src,dest)
命令行模块
-
模块支持
import commands
-
常用函数
# 运行命令,等待结束。返回状态(正常返回是0)和结果。 (status, output) = commands.getstatusoutput(cmd) # 不返回状态的执行命令 output = commands.getoutput(cmd) # 不关心结果,只要执行即可 os.system(cmd)
-
样例代码
# 给定一个dir路径,运行 'ls -l' def listdir(dir): cmd = 'ls -l ' + dir print "Command to run:", cmd ## 易于调试 (status, output) = commands.getstatusoutput(cmd) if status: ## 错误情况,打印错误信息并退出 sys.stderr.write(output) sys.exit(1) print output ## 否则显示输出结果
异常处理
-
样例代码
try: # 打开文件或读取文件出现问题将抛出 IOError 异常. f = open(filename, 'rU') text = f.read() f.close() except IOError: # 处理 IOError 异常. sys.stderr.write('problem reading:' + filename) # try/except后面的代码将继续执行
网络模块
-
模块支持
import urllib
-
常用函数
# 返回一个文件 ufile = urllib.urlopen(url) # 读取文件信息 text = ufile.read() # 获取网络文件meta/type 信息 info = ufile.info() type = info.gettype() # 获取最初始的url(针对重定向) baseurl = ufile.geturl() # 下载url数据到指定的文件 urllib.urlretrieve(url,filename) # 获取完整url urlparse.urljoin(baseurl,url)
-
样例代码
## 用try/except处理网络异常 def wget(url): try: ufile = urllib.urlopen(url) if ufile.info().gettype() == 'text/html': print ufile.read() except IOError: print 'problem reading url:', url wget('http://www.baidu.com') # 一定要加http://
课后练习
- 练习题1: copyspecial.py
- 练习题2: logpuzzle.py
如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢!
本篇文章由一文多发平台ArtiPub自动发布