Python模組基礎
模組,用一砣程式碼實作了某個函數的程式碼集合。
類似於函數式程式設計和流程編程,函數式程式設計則完成一個功能,其他程式碼用來呼叫即可,提供了程式碼的重複使用性和程式碼間的耦合。而對於一個複雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py檔案中),n個 .py 檔案所組成的程式碼集合就稱為模組。
如:os 是系統相關的模組;file是檔案操作相關的模組
模組分為三種:
- 自訂模組
- #內建模組
- 開源模組
自訂模組
#1、定義模組
## 在情景一:
# 情境二:
情境三:
2、導入模組
Python之所以應用越來越廣泛,在一定程度上也依賴其為程式設計師提供了大量的模組以供使用,如果想要使用模組,則需要導入。導入模組有幾種方法:
import modulefrom module.xx.xx import xxfrom module.xx.xx import xx as rename from module.xx.xx import *
#
透過os模組可以取得各種目錄,例如:
用於提供系統層級的動作
用於提供對解釋器相關的操作
用於加密相關的操作,代替了md5模組和sha模組,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法
導入模組其實就是告訴Python解釋器去解釋那個py文件
- 導入一個py文件,解釋器解釋該py文件
- 導入一個包,解釋器解釋該套件下的__init__.py 檔案
那麼問題來了,導入模組時是根據那個路徑作為基準來進行的呢?即:sys.path
import sys print sys.path 结果: ['E:\Python\\xc1\xb7\xcf\xb0', 'E:\Python', 'C:\Windows\SYSTEM32\python27.zip', 'D:\Install\Python\DLLs', 'D:\Install\Python\lib', 'D:\Install\Python\lib\plat-win', 'D:\Install\Python\lib\lib-tk', 'D:\Install\Python', 'D:\Install\Python\lib\site-packages']如果sys.path路徑清單沒有你想要的路徑,可以透過 sys.path.append('路徑') 新增。
透過os模組可以取得各種目錄,例如:
import sys import os pre_path = os.path.abspath('../') sys.path.append(pre_path)
開源模組
一、下載安裝
下載安裝有兩種方式:
yum pip 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/lib/python2.7/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 # 进入python环境,导入Crypto检查是否安装成功 # 下载安装 paramiko wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz tar -xvf paramiko-1.10.1.tar.gz cd paramiko-1.10.1 python setup.py build python setup.py install # 进入python环境,导入paramiko检查是否安装成功2、使用模組
#!/usr/bin/env python #coding:utf-8 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.108', 22, 'alex', '123') stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() ssh.close();
import paramiko private_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('主机名 ', 端口, '用户名', key) stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() ssh.close()
import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test.py','/tmp/test.py') t.close() import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test.py','/tmp/test2.py') t.close() 上传或者下载文件 - 通过用户名和密码
import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test3.py','/tmp/test3.py') t.close() import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test3.py','/tmp/test4.py') t.close() 上传或下载文件 - 通过密钥
內建模組
一、os
用於提供系統層級的動作os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
二、sys
用於提供對解釋器相關的操作sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
SYS模块
三、hashlib
用於加密相關的操作,代替了md5模組和sha模組,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法
import md5 hash = md5.new() hash.update('admin') print hash.hexdigest()
import sha hash = sha.new() hash.update('admin') print hash.hexdigest()
import hashlib # ######## md5 ######## hash = hashlib.md5() hash.update('admin') print hash.hexdigest() # ######## sha1 ######## hash = hashlib.sha1() hash.update('admin') print hash.hexdigest() # ######## sha256 ######## hash = hashlib.sha256() hash.update('admin') print hash.hexdigest() # ######## sha384 ######## hash = hashlib.sha384() hash.update('admin') print hash.hexdigest() # ######## sha512 ######## hash = hashlib.sha512() hash.update('admin') print hash.hexdigest()以上加密演算法雖然依然非常厲害,但時候有缺陷,即:透過撞庫可以反解。所以,有必要在加密演算法中加入自訂key再來做加密。
import hashlib # ######## md5 ######## hash = hashlib.md5('898oaFs09f') hash.update('admin') print hash.hexdigest()還不夠厲害? python 還有一個 hmac 模組,它內部對我們創建 key 和 內容 再進行處理然後再加密###
import hmac h = hmac.new('wueiqi') h.update('hellowo') print h.hexdigest()######