查看原文
其他

霸占 CSDN 榜一的 20 个 Python 实战用例总结

The following article is from 信息技术智库 Author 不吃西红柿丶

作者 | 不吃西红柿

来源 | 信息技术智库

本文整理了10个常用标准库的用例和10个常用高级库的用例,尤其适合初学者。

python标准库思维导图:


01、操作系统接口


os模块提供了不少与操作系统相关联的函数。
>>> import os>>> os.getcwd() # 返回当前的工作目录'C:\\Python34'>>> os.chdir('/server/accesslogs') # 修改当前的工作目录>>> os.system('mkdir today') # 执行系统命令 mkdir

建议使用 "import os" 风格而非 "from os import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。


os常用命令

序号方法功能
1os.access(path, mode)  检验权限模式
2os.chdir(path)   改变当前工作目录
3os.chflags(path, flags)  设置路径的标记为数字标记。
4os.chmod(path, mode)    更改权限
5os.chown(path, uid, gid)  更改文件所有者
6os.chroot(path)   改变当前进程的根目录
7os.close(fd)    关闭文件描述符 fd
8os.closerange(fd_low, fd_high)    关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9os.dup(fd)    复制文件描述符 fd
10os.dup2(fd, fd2)    将一个文件描述符 fd 复制到另一个 fd2



02、文件通配符


glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:

>>> import glob>>> glob.glob('*.py')

['primes.py', 'random.py', 'quote.py']



03、命令行参数


通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。

sys.argv

可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。

变量解释
  • sys.argv[0]当前程序名

  • sys.argv[1]第一个参数

  • sys.argv[2]第二个参数

len(sys.argv)-1 参数个数(减去文件名)
例如在命令行中执行 "python demo.py one two three" 后可以得到以下输出结果:
>>> import sys>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']



04、字符串正则匹配


re模块为高级字符串处理提供了正则表达式工具。可以说是爬虫必备,对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试:

>>> 'tea for too'.replace('too', 'two')

'tea for two'

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

函数语法

re.match(pattern, string, flags=0)


函数参数说明:
参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法描述
group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。



05、数学计算


math模块为浮点运算提供了对底层C函数库的访问:

>>> import math>>> math.cos(math.pi / 4)0.70710678118654757>>> math.log(1024, 2)10.0

在实际工作中,math标准库往往无法满足需求,我还需要扩展库:NumPy
NumPy(Numerical Python) 支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
  • NumPy 官网 http://www.numpy.org/


06、发送邮件


有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:
import smtplibsmtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
参数说明
  • host: SMTP 服务器主机。你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。
  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
  • local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。
Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

参数说明

  • from_addr: 邮件发送者地址。
  • to_addrs: 字符串列表,邮件发送地址。
  • msg: 发送消息
案例:
#!/usr/bin/python# -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMETextfrom email.header import Headersender = 'from@runoob.com'receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')message['From'] = Header("菜鸟教程", 'utf-8') # 发送者message['To'] = Header("测试", 'utf-8') # 接收者subject = 'Python SMTP 邮件测试'message['Subject'] = Header(subject, 'utf-8')try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功"except smtplib.SMTPException: print "Error: 无法发送邮件"



07、日期和时间


datetime模块为日期和时间处理同时提供了简单和复杂的方法。
支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。
该模块还支持时区处理:
>>> # dates are easily constructed and formatted>>> from datetime import date>>> now = date.today()>>> nowdatetime.date(2003, 12, 2)>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
时间的三种存在方式:时间对象,时间字符串,时间戳。
(1)字符串转datetime:
>>> string = '2014-01-08 11:59:58'>>> time1 = datetime.datetime.strptime(string,'%Y-%m-%d %H:%M:%S')>>> print time12014-01-08 11:59:58
(2)datetime转字符串:
>>> time1_str = datetime.datetime.strftime(time1,'%Y-%m-%d %H:%M:%S')>>> time1_str'2014-01-08 11:59:58'
(3)时间戳转时间对象:
>>>time1 = time.localtime()>>>time1_str = datetime.datetime.fromtimestamp(time1)



08、数据压缩


以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。
>>> import zlib>>> s = b'witch which has which witches wrist watch'>>> len(s)41>>> t = zlib.compress(s)>>> len(t)37>>> zlib.decompress(t)b'witch which has which witches wrist watch'>>> zlib.crc32(s)226805979



09、性能度量


有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。
>>> from timeit import Timer>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()0.57535828626024577>>> Timer('a,b = b,a', 'a=1; b=2').timeit()0.54962537085770791

相对于 timeit 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。


10、测试模块


开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试
doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。
测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。
通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:
def average(values): """Computes the arithmetic mean of a list of numbers.
>>> print(average([20, 30, 70])) 40.0 """ return sum(values) / len(values)
import doctestdoctest.testmod() # 自动验证嵌入测试



11、操作数据库:MySQLdb


安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python 
import MySQLdb# 连接数据库conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='test1')# 获取cursor对象来进行操作cursor = conn.cursor()# 从你的全世界错过~sql = "select * from world where someone like 'you' "# 执行sqlcursor.execute(sql)



12、Web 开发:flask


把客户端所有的请求都转发给这个程序实例

from flask import Flaskimport datetimeserver=Flask(__name__)@server.route('/time',methods=['post','get'])def get_time(): now=str(datetime.datetime.now())#把当前时间转换成字符串 return "当前的时间是:%s"%nowserver.run(port=8888)




13、网络爬虫:requests


Requests 允许你发送纯天然的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的。
一个简单的爬虫样例:
import requestsheads = {}heads['User-Agent'] = 'Mozilla/5.0 ' \ '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \ '(KHTML, like Gecko) Version/5.1 Safari/534.50'response = requests.get('http://www.baidu.com',headers=headers)


14、操作execl:pandas


# -*- coding: utf-8 -*-import xlrdimport xlwtfrom datetime import date,datetimedef read_excel(): # 打开文件 workbook = xlrd.open_workbook(r'F:\demo.xlsx') # 获取所有sheet print workbook.sheet_names() # [u'sheet1', u'sheet2'] sheet2_name = workbook.sheet_names()[1] # 根据sheet索引或者名称获取sheet内容 sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始 sheet2 = workbook.sheet_by_name('sheet2') # sheet的名称,行数,列数 print sheet2.name,sheet2.nrows,sheet2.ncols # 获取整行和整列的值(数组) rows = sheet2.row_values(3) # 获取第四行内容 cols = sheet2.col_values(2) # 获取第三列内容 print rows print cols # 获取单元格内容 print sheet2.cell(1,0).value.encode('utf-8') print sheet2.cell_value(1,0).encode('utf-8') print sheet2.row(1)[0].value.encode('utf-8') # 获取单元格内容的数据类型 print sheet2.cell(1,0).ctypeif __name__ == '__main__': read_excel()



15、数据分析:numpy


NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。
NumPy 提供了多种排序的方法。这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。下表显示了三种排序算法的比较。
三角函数
NumPy 提供了标准的三角函数:sin()、cos()、tan()。
import numpy as npa = np.array([0,30,45,60,90])print ('不同角度的正弦值:')# 通过乘 pi/180 转化为弧度 print (np.sin(a*np.pi/180))print ('\n')print ('数组中角度的余弦值:')print (np.cos(a*np.pi/180))print ('\n')print ('数组中角度的正切值:')print (np.tan(a*np.pi/180))



16、数据画图分析:Matplotlib


import numpy as np from matplotlib import pyplot as plt x = np.arange(1,11) y = 2 * x + 5 plt.title("Matplotlib demo") plt.xlabel("x axis caption") plt.ylabel("y axis caption") plt.plot(x,y) plt.show()


以上实例中,np.arange() 函数创建 x 轴上的值。y 轴上的对应值存储在另一个数组对象 y 中。这些值使用 matplotlib 软件包的 pyplot 子模块的 plot() 函数绘制。
图形由 show() 函数显示。



17、科学计算:scipy


scipy.special库中的特殊函数都是超越函数,所谓超越函数是指变量之间的关系不能用有限次加、减、乘、除、乘方、开方 运算表示的函数。如初等函数中的三角函数、反三角函数与对数函数、指数函数都是初等超越函数,一般来说非初等函数都是超越函数。
初等函数:指由基本初等函数经过有限次四则运算与复合运算所得到的函数



18、视觉及图像处理:PIL(pillow)


创建缩略图
import osfrom PIL import Image
image_path = 'python-logo.png' # 图片位置size = (128, 128) # 文件大小f, e = os.path.splitext(image_path) # 获取文件名与后缀outfile = f + ".thumbnail"if image_path != outfile: try: im = Image.open(image_path) im.thumbnail(size) # 设置缩略图大小 im.save(outfile, "JPEG") except IOError: print("cannot convert", image_path)

创建滚动图形

python学得好,PS也能干!
from PIL import Image
def roll(image, delta): """ 向侧面滚动图像 """ xsize, ysize = image.size roll(im, 300).show() # 向侧面滚动 300 像素 delta = delta % xsize if delta == 0: return image
part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part1, (xsize - delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize - delta, ysize))
return image

if __name__ == '__main__': image_path = 'test.jpg' im = Image.open(image_path)



19、图形界面开发:PyQT


俄罗斯方块游戏是有史以来最受欢迎的电脑游戏。
最初的游戏是由俄罗斯设计和编程的程序员阿列克谢帕基特诺夫于1985年。此后,俄罗斯方块是几乎所有的计算机平台上可用在很多变化。
俄罗斯方块称为积木拼图游戏。在这个游戏中,我们有七种不同形状叫tetrominoes:“s”形,Z-shape,t形,一个l型的空间,一个线,MirroredL-shape和正方形。这些形状的形成有四个方格。形状是跌倒。俄罗斯方块游戏的对象是移动和旋转的形状使他们适合尽可能多。
如果我们设法形成一个行,该行摧毁我们得分。我们直到我们玩俄罗斯方块游戏。
PyQt5是一种用于创建应用程序的工具。还有其他的库是针对创建电脑游戏。
然而,PyQt5和其他应用程序工具包可以用来创建简单的游戏。
创建一个电脑游戏是一个提高编程技能的很好的方发。



20、游戏开发:pygame


  • Pygame是一组跨平台的Python模块, 用于创建视频游戏。

  • 它由旨在与Python编程语言一起使用的计算机图形和声音库组成。

  • Pygame由Pete Shinners正式编写, 以取代PySDL。

  • Pygame适合于创建客户端应用程序, 这些应用程序可以包装在独立的可执行文件中。

import pygamepygame.init()screen = pygame.display.set_mode((400, 500))done = Falsewhile not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pygame.display.flip()

资讯

Meta开发AI语音助手,助力元宇宙

技术

Pandas重复数据处理大全

技术

5个短小精悍的Python趣味脚本

资讯

M2芯片终于要来了?全线换新


分享

点收藏

点点赞

点在看

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存