目录:

1、模块介绍

2、time & datetime

3、random

4、OS

5、sys

6、shutil

7、json & pickle

8、shelve

9、xml 处理

10、YAML 处理

11、configparser

12、hashlib

13、subprocess

14、logging


What is module?

模块,用一砣代码实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程完成一个功能,其它代码用来调用即可,模块提供了代码的重用性和代码间的耦合。对于一个复杂的功能来说,可能需要多个函数才能完成(函数又可以在不同的 .py 文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file 是文件操作相关的模块。

模块分为三种:

  • 自定义模块(自己编写的模块)
  • 内置标准模块(又称标准库)
  • 开源模块(网络上下载别人编写的模块)
    •   pypi.python.org  (Python 官方提供的开源模块下载地址)

模块解耦:

让程序之间的关联性变低,通俗的讲就是减少模块间的互相干扰,让各个模块的修改变化尽可能小的影响其它模块。

2、导入模块

Python 之所以应用越来越广泛,在一定程序上也依赖于其为程序员提供了大量的模块使用,如果想要使用模块,有如下几种导入方法:

  1. import module #导入整个模块
  2. from module.xx.xx import xx # 从某个模块目录中倒入某个方法(. 相当于路径分隔符,例如:from backend.db.sql_api import select)
  3. from module.xx.xx import xx as rename # 从某个模块目录中倒入某个方法,并对方法进行重命名
  4. from module.xx.xx import * # 将模块下的所有方法都倒入(模块太多,容易产生冲突,覆盖另一个重名模块)

导入模块其实就是告诉 Python 解释器去解释对应的 py 文件

  • 导入一个 py 文件,解释器解释该 py 文件
  • 导入一个包,解释器解释该包下的 __init__.py 文件

导入模块时,会根据系统默认的搜索路径,按照预先定义好的路径顺序搜索指定模块:

sys.path:列表,列表中存放的是全局搜索路径,倒入模块时会循环 sys.path 列表中的所有路径,以第一次找到的模块名为准。

  1. import sys # 倒入 sys 模块
  2. print (sys.path) # 打印方法中存放的路径
  3. 结果:
  4. ['', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages']
  5. # 其中第一个路径为Python 当前工作目录,最后一个路径 '/usr/local/lib/python3.4/site-packages' 专门用来存放第三方开源模块,放在这个目录中直接 import 即可倒入

如果 sys.path 路径列表中没有你想要的路径,可以通过 sys.path.append('路径') 添加。

通过 os 模块可以获取目录名,例如:

  1. import sys
  2. import os
  3. pre_path = os.path.abspath('../')
  4. # 此时将 python 运行目录的上层目录保存至 pre_path 变量中
  5. sys.path.append(pre_path)
  6. # 将pre_path 加入模块搜索路径
  7. print (sys.path)
  8. ['', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages', '/']
  9. # / 已经被加入 sys.path 模块搜索路径的尾部

如果一个自定义模块想要被 from 倒入,它一定要是包格式,也就是说目录内必须存在 __init__.py 文件。

__init__.py:功能是将目录变为一个包,允许通过 . 的方式倒入。

__file__:当前程序从执行位置起的相对路径(在哪个目录下调用该程序,就会打印哪个目录起至程序的路径)

  1. # Python 文件当前所在目录
  2. /root/test1/test2
  3. vim test.py
  4. #!/usr/bin/env python
  5. print (__file__)
  6. #保存
  7.  
  8. # 从当前目录下执行 test.py
  9. python test.py
  10. # __file__ 中保存的就是 Python 文件名
  11. test.py
  12.  
  13. # 从上级目录执行 test.py
  14. python test2/test.py
  15. # __file__ 中保存的是调用Python 的目录 + 文件名
  16. test2/test.py
  17.  
  18. # 从顶级目录执行 test.py
  19. python /root/test1/test2/test.py
  20. # __file__ 中保存的就是顶级目录 + 文件名
  21. /root/test1/test2/test.py

那有朋友就问了 __file__ 中保存的只是相对路径,而我需要当前程序的绝对路径怎么办?

  1. vim test.py
  2. import os
  3. print (os.path.abspath(__file__))
  4. # 保存
  5.  
  6. python test.py
  7. # 直接在相对路径下调用 test.py 文件,打印出了绝对路径
  8. /root/test1/test2/test.py

开源模块

下载安装有两种方式:

  1. yum
  2. pip # Python 官方提供的专门用来安装开源模块的命令
  3. # 例:pip install openunipay
  4. apt-get
  5. ……
  1. 下载源码包
  2. 解压源码包
  3. 进入解压后的源码包目录
  4. 编译译码
  5. python setup.py build
  6. 安装源码
  7. python setup.py install

注:在使用源码安装时,需要使用 gcc 编译器编译和 Python 开发包,所以,需要先执行:

  1. yum install gcc
  2. yum install python-devel

  3. apt-get python-dev

安装成功后,模块会自动安装到 sys.path 中专门存放第三方开源模块的目录中:

  1. /usr/blib/python3.4/site-packages/

三、模块  paramiko

paramiko 是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,fabric 和 ansible 内部的远程管理就是使用 paramiko 来实现。

1、下载安装:

  1. # pycrypto,由于 paramiko 模块内部依赖 pycrypto,所以先下载安装 pycrypto
  2.  
  3. # 下载安装 pycrypto
  4. wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
  5. tar -xvf pycrypto-2.6.1.tar.gz
  6. cd pycrypto-2.6.1
  7. python setup.py build
  8. python setup.py install
  9. # 模块编译成功后会放置在模块所在目录 build/ 下,mv 至对应 python 版本存放开源模块的目录中
  10. mv build/lib.linux-x86_64-3.4/Crypto /usr/local/lib/python3.4/site-packages/
  11.  
  12. # 进入 python 环境,导入 Crypto 检查安装是否成功
  13. import Crypto
  14.  
  15. # 下载安装 paramiko
  16. wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
 

常用内置模块

一、OS

用于提供系统级别操作

  1. # os.getcwd() 获取当前 Python 脚本工作路径
  2. os.getcwd()
  3. /root/test1/test2/
  4.  
  5. # os.chdir("dirname") 改变当前脚本工作目录;相当于 Shell 中 cd 命令
  6. os.chdir("/etc/")
  7. os.getcwd()
  8. /etc/
  9.  
  10. # os.curdir 返回当前目录:('.')
  11. os.curdir
  12. '.'
  13.  
  14. # os.pardir 获取当前目录的父目录字符串名:('..')
  15. os.pardir
  16. '..'
  17.  
  18. # os.makedirs('dirname1/dirname2') 递归创建多层目录(创建在当前脚本工作目录下)
  19. os.makedirs('dir01/dir02/dir03')
  20.  
  21. # os.removedirs('dirname1') 指定目录为空,则删除,并退到上一级目录,上级目录如为空,则删除,一直递归下去
  22. os.removedirs('/root/test01/test02/test03')
  23. # /root/test01/ 目录下除 test02/ 外没有任何内容,会一直删到 /root/ 目录为止(目录下必须为空才可删除)
  24.  
  25. # os.mkdir('dirname') # 创建单级目录;相当于 shell 中 mkdir dirname
  26. os.mkdir('/root/test01') # 只能创建单层目录
  27.  
  28. # os.rmdir('dirname') # 删除单级空目录,若目录不为空则报错;相当于 shell 中 rmdir ('/root/test01/')
  29.  
  30. # os.listdir('dirname') # 以列表方式打印出指定目录下的所有文件和子目录,包含隐藏文件
  31. os.listdir('/root/')
  32. ['.bash_logout', '.bash_profile', '.bashrc', '.cshrc', '.tcshrc', 'anaconda-ks.cfg', '.bash_history', 'test.py', 'test2.py', 'a', 'b', 'c', 'root', 'test.txt', '.lesshst', 'Python-3.4.3.tgz', 'Python-3.4.3', '.viminfo', 'dir01', 'test01']
  33.  
  34. # os.remove() 删除一个文件
  35. os.remove('/root/test.txt')
  36.  
  37. # os.rename("oldname","newname") 重命名文件/目录
  38. os.rename('/root/test01/','/root/haha01')
  39.  
  40. # os.stat('path/filename') 获取文件/目录信息
  41. os.stat('/root/haha01')
  42. os.stat_result(st_mode=16877, st_ino=68783296, st_dev=2053, st_nlink=3, st_uid=0, st_gid=0, st_size=32, st_atime=1446357817, st_mtime=1446357760, st_ctime=1446358064)
  43.  
  44. # os.sep 输出操作系统特定的路径分隔符,win 下为 "\\",Linux 下为 "/"
  45. os.sep
  46. '/'
  47.  
  48. # os.linesep 输出当前平台使用的行终止符,win 下为 "\r\n",Linux下为 "\n"
  49. os.linesep
  50. '\n'
  51.  
  52. # os.pathsep 输出用于分割文件路径的字符串
  53. os.pathsep
  54. ":"
  55.  
  56. # os.name 得到系统内置变量,用来区分当前平台 win-->'nt';linux-->'posix'
  57. os.name
  58. "posix"
  59.  
  60. # os.system("bash command") 运行 shell 命令,并显示返回内容与返回值
  61. os.system("date")
  62. 2015 11 01 星期日 14:21:23 CST
  63. 0
  64.  
  65. # os.environ 获取系统环境变量,并以字典形式输出
  66. os.environ
  67. environ({'SHLVL': '1', 'LANG': 'zh_CN.UTF-8', 'MAIL': '/var/spool/mail/root', 'USER': 'root', 'TERM': 'xterm', 'SSH_CONNECTION': '192.168.1.4 56590 192.168.1.8 22' …………………………})
  68.  
  69. # os.path.abspath(path) 返回 path 规范化的绝对路径
  70. os.path.abspath('a/test') # test.py 必须在当前工作目录下
  71. '/root/a/test'
  72.  
  73. #os.path.split(path) # 将 path 的目录部分与文件名部分保存为元组中两个元素
  74. os.path.split(os.getcwd())
  75. ('/root/a', 'enterprise')
  76.  
  77. #os.path.dirname(path) # 返回 path 的目录部分,其实就是 os.path.split(path) 的第一个元素(并不会检测目录是否真实存在)
  78. os.path.dirname(os.getcwd())
  79. '/root/a'
  80.  
  81. # os.basename(path) # 返回 path 最后的文件名;如果 path 以 / 或 \ 结尾,那么就会返回空值,即 os.path.split(path) 的第二个元素(并不会检测文件是否真实存在)
  82. os.path.basename('/root/a/test')
  83. 'test'
  84. os.path.basename('/root/a/test/')
  85. ' '
  86.  
  87. #os.path.exists(path) # 如果 path 存在,返回 True;如果 path 不存在,返回 False
  88. os.path.exists('/root/a/fdsfsd')
  89. False
  90.  
  91. #os.path.isabs() # 如果 path 是绝对路径,返回 True (并不会path是否真实存在)
  92. os.path.isabs('/root/a/fdsfsd')
  93. True
  94. os.path.isabs('fdsfsd/')
  95. False
  96.  
  97. # os.path.isfile(path) # 如果 path 是一个存在的文件,返回 True。否则返回 False
  98. os.path.isfile('/root/a/fdsf')
  99. False
  100. os.path.isfile('/root/a/test')
  101. True
  102.  
  103. # os.path.isdir(path) # 如果 path 是一个存在的目录,则返回 True,否则返回 False
  104. os.path.isdir('/root/a/')
  105. True
  106. os.path.isdir('/root/aa/')
  107. False
  108.  
  109. # os.path.join(path[,path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  110. os.path.join('/etc/root','a','test','aaa')
  111. '/etc/root/a/test/aaa'
  112.  
  113. # os.path.getatime(path) # 以时间戳格式返回 path 所指向的文件或目录的最后存取时间(path 不存在会报错)
  114. os.path.getatime('/root/a')
  115. 1446360249.3873208
  116.  
  117. # os.path.getmtime(path) # 以时间戳格式返回 path 所指向的文件或目录的最后修改时间(path 不存在会报错)
  118. os.path.getmtime('/root/a')
  119. 1446360021.658315

  

[Python Day5] 常用模块的更多相关文章

  1. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  2. Python 之路 Day5 - 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  3. python 2.0 s12 day5 常用模块介绍

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  4. Python学习-day5 常用模块

    day5主要是各种常用模块的学习 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 conf ...

  5. Python之路,Day5 - 常用模块学习 (转载Alex)

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  6. Python之路-python(常用模块学习)

    模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib re正则表达式 1.模块 ...

  7. python之常用模块

    python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...

  8. python之常用模块二(hashlib logging configparser)

    摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...

  9. Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...

随机推荐

  1. 《与小卡特一起学Python》 Code2

    下边是一个猜数字的小游戏: 几乎所有语言都这样做的…… here we go! import random secret = random.randint(1,99) guess = 0 tries ...

  2. ie6、7下 text-indent 问题

    text-indent属性 用于文字缩进,更多是用来隐藏文字.比如,一个logo标题,上面的问题很有艺术感,不得不把文字和背景组合成一张背景图(此处页面元素用a表示),但处于SEO方面的考虑,需要把a ...

  3. Java学习路线图,专为新手定制的Java学习计划建议

    怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西:    首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA).J ...

  4. go排序

    补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了. go 的排序思路和 c 和 c++ 有些差别. c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一 ...

  5. 前端静态资源版本更新与缓存之——gulp自动化添加版本号

    公司项目每次发布后,偶尔会有缓存问题,然后看了下gulp,发现gulp还能给js,css自动化添加版本号,可解决缓存的问题,所以自动化实现静态资源的版本更新才是正道.通过网上的资料试过了两种办法: 1 ...

  6. EasyUI 的Tab 标签添加右键菜单

    样式: 主要提供右键功能代码. (只需要提供你需要的js和css就行了) <!doctype html> <html> <head> <base href=& ...

  7. java中Array/List/Map/Object与Json互相转换详解

    http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...

  8. 附加类型的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值

    var list= DAL.LoadEntities(x => x.OrderCode == orderCode).AsNoTracking().ToList().FirstOrDefault( ...

  9. contiki-process结构体

    struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #define PROCESS_NAME_STRING ...

  10. mysql-5.7.9安装

    版本:mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz(编译版本) 解压: tar -zxvf mysql-5.7.9-linux-glibc2.5-x86_64.ta ...