{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "toc": "true" }, "source": [ "# Table of Contents\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Python 常用模块\n", "\n", "Python 模块是实现了某个功能的一堆代码的集合。包含n个.py文件实现一个复杂得功能。\n", "\n", "可以把模块理解为乐高积木,你用这些模块组合出一个模型,然后也可以用这个模块加上其他的模块组合成一个新的模型,Python 开发速度快很多受益于Python 有很多功能强大的第三方模块。\n", "\n", "模块分为三种:\n", "- 内置模块\n", "- 第三方模块\n", "- 自定义模块\n", "\n", "在这里我会竟可能详细介绍到各个模块常用的功能,如果想深入了解具体和最新的内容务必到查看官方文档。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## 内置模块\n", "\n", "### 导入模块" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "# 单模块,在同一级目录下的\n", "import <模块名>\n", "\n", "# 嵌套在文件夹下的\n", "from lib import sa\n", "\n", "# 嵌套在多级文件夹下的(lib目录下,test目录下)\n", "from lib.test import sa\n", "\n", "# 不同文件夹,重名模块\n", "from lib import com as lib_com\n", "from src import com as src_com" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "那么问题来了,导入模块时是根据哪个路径作为基准来进行的呢?即:sys.path" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/site-packages/IPython/extensions', '/Users/lianliang/.ipython']\n" ] } ], "source": [ "import sys\n", "\n", "print(sys.path)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/lianliang/Desktop/python_notebook\n", "['', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/site-packages/IPython/extensions', '/Users/lianliang/.ipython', '/Users/lianliang/Desktop/python_notebook']\n" ] } ], "source": [ "import sys\n", "import os\n", "\n", "project_path = os.path.dirname(os.path.abspath('/Users/lianliang/Desktop/python_notebook/Python 常用模块.ipynb'))\n", "print(project_path)\n", "sys.path.append(project_path)\n", "print(sys.path)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "上面看到了有导入两个模块,那么来详细看看这两个模块的功能吧。\n", "\n", "### sys\n", "\n", "用于提供对Python解释器相关的操作:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import sys" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "常用的操作:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "sys.argv # 命令行参数List,第一个元素是程序本身路径\n", "sys.exit(n) # 退出程序,正常退出时exit(0)\n", "sys.version # 获取Python解释程序的版本信息\n", "sys.maxint # 最大的Int值\n", "sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值\n", "sys.platform # 返回操作系统平台名称\n", "sys.stdin # 输入相关\n", "sys.stdout # 输出相关\n", "sys.stderror # 错误相关" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### os\n", "\n", "用于系统级别的操作:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径\n", "os.chdir(\"dirname\") # 改变当前脚本工作目录;相当于shell下cd\n", "os.curdir # 返回当前目录: ('.')\n", "os.pardir # 获取当前目录的父目录字符串名:('..')\n", "os.makedirs('dir1/dir2') # 可生成多层递归目录\n", "os.removedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推\n", "os.mkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname\n", "os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname\n", "os.listdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印\n", "os.remove() # 删除一个文件\n", "os.rename(\"oldname\",\"new\") # 重命名文件/目录\n", "os.stat('path/filename') # 获取文件/目录信息\n", "os.sep # 操作系统特定的路径分隔符,win下为\"\\\\\",Linux下为\"/\"\n", "os.linesep # 当前平台使用的行终止符,win下为\"\\t\\n\",Linux下为\"\\n\"\n", "os.pathsep # 用于分割文件路径的字符串\n", "os.name # 字符串指示当前使用平台。win->'nt'; Linux->'posix'\n", "os.system(\"bash command\") # 运行shell命令,直接显示\n", "os.environ # 获取系统环境变量\n", "os.path.abspath(path) # 返回path规范化的绝对路径\n", "os.path.split(path) # 将path分割成目录和文件名二元组返回\n", "os.path.dirname(path) # 返回path的目录。其实就是os.path.split(path)的第一个元素\n", "os.path.basename(path) # 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素\n", "os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False\n", "os.path.isabs(path) # 如果path是绝对路径,返回True\n", "os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False\n", "os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False\n", "os.path.join(path1[, path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略\n", "os.path.getatime(path) #返回path所指向的文件或者目录的最后存取时间\n", "os.path.getmtime(path) #返回path所指向的文件或者目录的最后修改时间" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### time\n", "\n", "时间相关的操作,时间有三种表示方式:\n", "- 时间戳\n", "- 格式化字符串\n", "- 结构化时间" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import time" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "1504597649.343132" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 时间戳,1970年1月1日之后的秒\n", "time.time()" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'2017-09-05 17:00:49'" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 格式化的字符串\n", "time.strftime('%Y-%m-%d %H:%M:%S')" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "time.struct_time(tm_year=2017, tm_mon=9, tm_mday=5, tm_hour=17, tm_min=1, tm_sec=7, tm_wday=1, tm_yday=248, tm_isdst=0)" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "(2017, 9, 5, 17, 1, 7, 1, 248, 0)" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 结构化时间,元组包含了:年、日、星期等... time.struct_time 即:time.localtime()\n", "time.localtime()\n", "tuple(time.localtime())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "| 属性 | 含义 | 值 |\n", "| -------- | :----- | ------------------------ |\n", "| tm_year | 4位数年 | 2008 |\n", "| tm_mon | 月 | 1 到 12 |\n", "| tm_mday | 日 | 1 到 31 |\n", "| tm_hour | 小时 | 0 到 23 |\n", "| tm_min | 分钟 | 0 到 59 |\n", "| tm_sec | 秒 | 0 到 61 (60或61 是闰秒) |\n", "| tm_wday | 一周的第几日 | 0到6 (0是周日) |\n", "| tm_yday | 一年的第几日 | 1 到 366(儒略历) |\n", "| tm_isdst | 夏令时 | -1, 0, 1, -1是决定是否为夏令时的旗帜 |" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "接下来看看常用方法:" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "1504602078.759796" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 返回当前系统时间戳\n", "time.time()" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'Tue Sep 5 17:01:19 2017'" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 返回当前系统时间\n", "time.ctime()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'Mon Sep 4 17:01:20 2017'" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 将时间转换为字符串格式\n", "time.ctime(time.time()-86400)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "time.struct_time(tm_year=2017, tm_mon=9, tm_mday=4, tm_hour=9, tm_min=1, tm_sec=21, tm_wday=0, tm_yday=247, tm_isdst=0)" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组\n", "time.gmtime(time.time()-86400)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "time.struct_time(tm_year=2017, tm_mon=9, tm_mday=4, tm_hour=16, tm_min=57, tm_sec=51, tm_wday=0, tm_yday=247, tm_isdst=0)" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组\n", "time.localtime(time.time()-86400)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "1504602397.0" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 与time.localtime() 功能相反,将struct_time格式转回成时间戳格式\n", "time.mktime(time.localtime())" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "'2017-09-05 17:31:56'" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 将struct_time格式转成指定的字符串格式\n", "time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "time.struct_time(tm_year=2017, tm_mon=9, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=247, tm_isdst=-1)" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 将struct_time格式转成指定的字符串格式\n", "time.strptime(\"2017-9-4\", \"%Y-%m-%d\")" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "3.243893" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。\n", "time.clock()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "#sleep,等待4秒\n", "time.sleep(4) " ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0014300000000000423 seconds process time\n", "2.503314971923828 seconds wall time\n" ] } ], "source": [ "def procedure():\n", " time.sleep(2.5)\n", "\n", "# measure process time\n", "t0 = time.clock()\n", "procedure()\n", "print(time.clock() - t0, \"seconds process time\")\n", "\n", "# measure wall time\n", "t0 = time.time()\n", "procedure()\n", "print(time.time() - t0, \"seconds wall time\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### datetime" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import datetime" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "datetime.date(2017, 9, 5)" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "2017-09-05\n" ] } ], "source": [ "# 获取当天日期\n", "datetime.date.today()\n", "print(datetime.date.today())" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2017-09-04\n" ] } ], "source": [ "# 将时间戳转成日期格式\n", "print(datetime.date.fromtimestamp(time.time()-86400))" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2017-09-05 17:43:32.869855\n" ] } ], "source": [ "# 获取当前时间,精确到毫秒\n", "current_time = datetime.datetime.now()\n", "print(current_time)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "time.struct_time(tm_year=2017, tm_mon=9, tm_mday=5, tm_hour=17, tm_min=43, tm_sec=32, tm_wday=1, tm_yday=248, tm_isdst=-1)" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 返回struct_time格式\n", "current_time.timetuple()" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2002-02-01 17:43:32.869855\n" ] } ], "source": [ "# 返回当前时间,但指定的值将被替换\n", "current_time.replace(2002, 2, 1)" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "datetime.datetime(2006, 11, 21, 16, 30)" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 将字符串转换成日期格式\n", "datetime.datetime.strptime(\"21/11/06 16:30\", \"%d/%m/%y %H:%M\")" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "datetime.datetime(2017, 9, 15, 18, 10, 5, 733945)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "datetime.datetime(2017, 8, 26, 18, 10, 5, 736410)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "datetime.datetime(2017, 9, 5, 8, 10, 5, 739484)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "datetime.datetime(2017, 9, 5, 18, 12, 5, 741866)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天\n", "datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天\n", "datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时\n", "datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "python中时间日期格式化符号:\n", "\n", "- %y 两位数的年份表示(00-99)\n", "- %Y 四位数的年份表示(000-9999)\n", "- %m 月份(01-12)\n", "- %d 月内中的一天(0-31)\n", "- %H 24小时制小时数(0-23)\n", "- %I 12小时制小时数(01-12)\n", "- %M 分钟数(00=59)\n", "- %S 秒(00-59)\n", "- %a 本地简化星期名称\n", "- %A 本地完整星期名称\n", "- %b 本地简化的月份名称\n", "- %B 本地完整的月份名称\n", "- %c 本地相应的日期表示和时间表示\n", "- %j 年内的一天(001-366)\n", "- %p 本地A.M.或P.M.的等价符\n", "- %U 一年中的星期数(00-53)星期天为星期的开始\n", "- %w 星期(0-6),星期天为星期的开始\n", "- %W 一年中的星期数(00-53)星期一为星期的开始\n", "- %x 本地相应的日期表示\n", "- %X 本地相应的时间表示\n", "- %Z 当前时区的名称\n", "- %% %号本身" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### random\n", "\n", "生存随机数" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import random" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "0.8702062522116073" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.random()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.randint(1, 5)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random.randrange(1, 5)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "randint(self, a, b)\n", "\n", " Return random integer in range [a, b], including both end points.\n", " \n", "randrange(self, start, stop=None, step=1, _int=