目录:

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

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

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

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

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

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

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

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

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

import sys
import os
pre_path = os.path.abspath('../')
# 此时将 python 运行目录的上层目录保存至 pre_path 变量中
sys.path.append(pre_path)
# 将pre_path 加入模块搜索路径
print (sys.path)
['', '/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', '/']
# / 已经被加入 sys.path 模块搜索路径的尾部

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

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

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

# Python 文件当前所在目录
/root/test1/test2
vim test.py
#!/usr/bin/env python
print (__file__)
#保存 # 从当前目录下执行 test.py
python test.py
# __file__ 中保存的就是 Python 文件名
test.py # 从上级目录执行 test.py
python test2/test.py
# __file__ 中保存的是调用Python 的目录 + 文件名
test2/test.py # 从顶级目录执行 test.py
python /root/test1/test2/test.py
# __file__ 中保存的就是顶级目录 + 文件名
/root/test1/test2/test.py

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

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

开源模块

下载安装有两种方式:

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

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

yum install gcc
yum install python-devel

apt-get python-dev

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

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

三、模块  paramiko

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

1、下载安装:

# pycrypto,由于 paramiko 模块内部依赖 pycrypto,所以先下载安装 pycrypto

# 下载安装 pycrypto
wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install
# 模块编译成功后会放置在模块所在目录 build/ 下,mv 至对应 python 版本存放开源模块的目录中
mv build/lib.linux-x86_64-3.4/Crypto /usr/local/lib/python3.4/site-packages/ # 进入 python 环境,导入 Crypto 检查安装是否成功
import Crypto # 下载安装 paramiko
wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
 

常用内置模块

一、OS

用于提供系统级别操作

# os.getcwd()  获取当前 Python 脚本工作路径
os.getcwd()
/root/test1/test2/ # os.chdir("dirname") 改变当前脚本工作目录;相当于 Shell 中 cd 命令
os.chdir("/etc/")
os.getcwd()
/etc/ # os.curdir 返回当前目录:('.')
os.curdir
'.' # os.pardir 获取当前目录的父目录字符串名:('..')
os.pardir
'..' # os.makedirs('dirname1/dirname2') 递归创建多层目录(创建在当前脚本工作目录下)
os.makedirs('dir01/dir02/dir03') # os.removedirs('dirname1') 指定目录为空,则删除,并退到上一级目录,上级目录如为空,则删除,一直递归下去
os.removedirs('/root/test01/test02/test03')
# /root/test01/ 目录下除 test02/ 外没有任何内容,会一直删到 /root/ 目录为止(目录下必须为空才可删除) # os.mkdir('dirname') # 创建单级目录;相当于 shell 中 mkdir dirname
os.mkdir('/root/test01') # 只能创建单层目录 # os.rmdir('dirname') # 删除单级空目录,若目录不为空则报错;相当于 shell 中 rmdir ('/root/test01/') # os.listdir('dirname') # 以列表方式打印出指定目录下的所有文件和子目录,包含隐藏文件
os.listdir('/root/')
['.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'] # os.remove() 删除一个文件
os.remove('/root/test.txt') # os.rename("oldname","newname") 重命名文件/目录
os.rename('/root/test01/','/root/haha01') # os.stat('path/filename') 获取文件/目录信息
os.stat('/root/haha01')
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) # os.sep 输出操作系统特定的路径分隔符,win 下为 "\\",Linux 下为 "/"
os.sep
'/' # os.linesep 输出当前平台使用的行终止符,win 下为 "\r\n",Linux下为 "\n"
os.linesep
'\n' # os.pathsep 输出用于分割文件路径的字符串
os.pathsep
":" # os.name 得到系统内置变量,用来区分当前平台 win-->'nt';linux-->'posix'
os.name
"posix" # os.system("bash command") 运行 shell 命令,并显示返回内容与返回值
os.system("date")
2015年 11月 01日 星期日 14:21:23 CST
0 # os.environ 获取系统环境变量,并以字典形式输出
os.environ
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' …………………………}) # os.path.abspath(path) 返回 path 规范化的绝对路径
os.path.abspath('a/test') # test.py 必须在当前工作目录下
'/root/a/test' #os.path.split(path) # 将 path 的目录部分与文件名部分保存为元组中两个元素
os.path.split(os.getcwd())
('/root/a', 'enterprise') #os.path.dirname(path) # 返回 path 的目录部分,其实就是 os.path.split(path) 的第一个元素(并不会检测目录是否真实存在)
os.path.dirname(os.getcwd())
'/root/a' # os.basename(path) # 返回 path 最后的文件名;如果 path 以 / 或 \ 结尾,那么就会返回空值,即 os.path.split(path) 的第二个元素(并不会检测文件是否真实存在)
os.path.basename('/root/a/test')
'test'
os.path.basename('/root/a/test/')
' ' #os.path.exists(path) # 如果 path 存在,返回 True;如果 path 不存在,返回 False
os.path.exists('/root/a/fdsfsd')
False #os.path.isabs() # 如果 path 是绝对路径,返回 True (并不会path是否真实存在)
os.path.isabs('/root/a/fdsfsd')
True
os.path.isabs('fdsfsd/')
False # os.path.isfile(path) # 如果 path 是一个存在的文件,返回 True。否则返回 False
os.path.isfile('/root/a/fdsf')
False
os.path.isfile('/root/a/test')
True # os.path.isdir(path) # 如果 path 是一个存在的目录,则返回 True,否则返回 False
os.path.isdir('/root/a/')
True
os.path.isdir('/root/aa/')
False # os.path.join(path[,path2[, ...]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.join('/etc/root','a','test','aaa')
'/etc/root/a/test/aaa' # os.path.getatime(path) # 以时间戳格式返回 path 所指向的文件或目录的最后存取时间(path 不存在会报错)
os.path.getatime('/root/a')
1446360249.3873208 # os.path.getmtime(path) # 以时间戳格式返回 path 所指向的文件或目录的最后修改时间(path 不存在会报错)
os.path.getmtime('/root/a')
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. mysql 数据库 表字段添加表情兼容

    项目中的几个需要支持Emoji表情符号,手机自带的表情,其实添加也很简单: 1 修改数据库 配置my.cnf  init-connect='SET NAMES utf8mb4'             ...

  2. Linux就该这么学

    第三章:Vim编辑器与Shell脚本 Vim文本编辑器 在Linux系统中配置应用服务,实际上就是在修改它的配置文件. 在热门的Linux操作系统中都会默认安装一款超好用的文本编辑器--"v ...

  3. jquery.validate.js在IE8下报错不运行

    因为项目要表单验证,所以特意去找了jquery.validate这个应该是jquery官方团队出品的表单验证插件. 实际应用时,却在IE8调试时碰到了问题. 从jquery.validate官网下载了 ...

  4. iOS 开发之SVN提交问题解决

    1.Commit failed (details follow): '/Users/dev_lzz/Desktop/cjh_ios(16)/cjh/iamgge/iconfont_arrow@3x.p ...

  5. 0.读书笔记之The major advancements in Deep Learning in 2016

    The major advancements in Deep Learning in 2016 地址:https://tryolabs.com/blog/2016/12/06/major-advanc ...

  6. A flash of Joy

    import re from datetime import timedelta from tornado import httpclient, gen, ioloop, queues peoples ...

  7. Unity中Time.deltaTime的含义及其应用

    The time in scenes it took to complete the last frame.这是使用此函数的时候给出的提示 一般我们会在设置速度的时候看到这个函数.先写出我对Time. ...

  8. web.Config配置数据库的连接

    <!--连接字符串设置--> <connectionStrings> <add name="ConnString" connectionString= ...

  9. python 基本语法

    第一个python程序 打开Sublime Text -->输出 print"Hello World" -->保存为frist.py -->打开命令行运行,运行p ...

  10. 理解Javascript之执行上下文(Execution Context)

    1>什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 - 当执行一 ...