Python模塊基礎(chǔ)

2018-10-10 14:22 更新

模塊,用一砣代碼實(shí)現(xiàn)了某個(gè)功能的代碼集合。 

類似于函數(shù)式編程和面向過程編程,函數(shù)式編程則完成一個(gè)功能,其他代碼用來調(diào)用即可,提供了代碼的重用性和代碼間的耦合。而對(duì)于一個(gè)復(fù)雜的功能來,可能需要多個(gè)函數(shù)才能完成(函數(shù)又可以在不同的.py文件中),n個(gè) .py 文件組成的代碼集合就稱為模塊。

如:os 是系統(tǒng)相關(guān)的模塊;file是文件操作相關(guān)的模塊

模塊分為三種:

  • 自定義模塊
  • 內(nèi)置模塊
  • 開源模塊

自定義模塊

1、定義模塊

情景一:

 

情景二:

 

情景三:

2、導(dǎo)入模塊

Python之所以應(yīng)用越來越廣泛,在一定程度上也依賴于其為程序員提供了大量的模塊以供使用,如果想要使用模塊,則需要導(dǎo)入。導(dǎo)入模塊有一下幾種方法:

import module
from module.xx.xx import xx
from module.xx.xx import xx as rename  
from module.xx.xx import *

導(dǎo)入模塊其實(shí)就是告訴Python解釋器去解釋那個(gè)py文件

  • 導(dǎo)入一個(gè)py文件,解釋器解釋該py文件
  • 導(dǎo)入一個(gè)包,解釋器解釋該包下的 __init__.py 文件

那么問題來了,導(dǎo)入模塊時(shí)是根據(jù)那個(gè)路徑作為基準(zhǔn)來進(jìn)行的呢?即:sys.path

import sys
print sys.path
  
結(jié)果:

['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
...
下載源碼
解壓源碼
進(jìn)入目錄
編譯源碼    python setup.py build
安裝源碼    python setup.py install
:在使用源碼安裝時(shí),需要使用到gcc編譯和python開發(fā)環(huán)境,所以,需要先執(zhí)行:
yum install gcc
yum install python-devel
或
apt-get python-dev
安裝成功后,模塊會(huì)自動(dòng)安裝到 sys.path 中的某個(gè)目錄中,如:
/usr/lib/python2.7/site-packages/

二、導(dǎo)入模塊

同自定義模塊中導(dǎo)入的方式

三、模塊 paramiko

paramiko是一個(gè)用于做遠(yuǎn)程控制的模塊,使用該模塊可以對(duì)遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作,值得一說的是,fabric和ansible內(nèi)部的遠(yuǎn)程管理就是使用的paramiko來現(xiàn)實(shí)。

1、下載安裝

# pycrypto,由于 paramiko 模塊內(nèi)部依賴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
 
# 進(jìn)入python環(huán)境,導(dǎo)入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
 
# 進(jìn)入python環(huán)境,導(dǎo)入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('主機(jī)名 ', 端口, '用戶名', 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()

上傳或下載文件 - 通過密鑰


內(nèi)置模塊

一、os

用于提供系統(tǒng)級(jí)別的操作

os.getcwd() 獲取當(dāng)前工作目錄,即當(dāng)前python腳本工作的目錄路徑
os.chdir("dirname")  改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd
os.curdir  返回當(dāng)前目錄: ('.')
os.pardir  獲取當(dāng)前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
os.removedirs('dirname1')    若目錄為空,則刪除,并遞歸到上一級(jí)目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname')    生成單級(jí)目錄;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname')    刪除單級(jí)空目錄,若目錄不為空則無法刪除,報(bào)錯(cuò);相當(dāng)于shell中rmdir dirname
os.listdir('dirname')    列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
os.remove()  刪除一個(gè)文件
os.rename("oldname","newname")  重命名文件/目錄
os.stat('path/filename')  獲取文件/目錄信息
os.sep    輸出操作系統(tǒng)特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep    輸出當(dāng)前平臺(tái)使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep    輸出用于分割文件路徑的字符串
os.name    輸出字符串指示當(dāng)前使用平臺(tái)。win->'nt'; Linux->'posix'
os.system("bash command")  運(yùn)行shell命令,直接顯示
os.environ  獲取系統(tǒng)環(huán)境變量
os.path.abspath(path)  返回path規(guī)范化的絕對(duì)路徑
os.path.split(path)  將path分割成目錄和文件名二元組返回
os.path.dirname(path)  返回path的目錄。其實(shí)就是os.path.split(path)的第一個(gè)元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\結(jié)尾,那么就會(huì)返回空值。即os.path.split(path)的第二個(gè)元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是絕對(duì)路徑,返回True
os.path.isfile(path)  如果path是一個(gè)存在的文件,返回True。否則返回False
os.path.isdir(path)  如果path是一個(gè)存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]])  將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略
os.path.getatime(path)  返回path所指向的文件或者目錄的最后存取時(shí)間
os.path.getmtime(path)  返回path所指向的文件或者目錄的最后修改時(shí)間

二、sys

用于提供對(duì)解釋器相關(guān)的操作

sys.argv           命令行參數(shù)List,第一個(gè)元素是程序本身路徑
sys.exit(n)        退出程序,正常退出時(shí)exit(0)
sys.version        獲取Python解釋程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
sys.platform       返回操作系統(tǒng)平臺(tái)名稱
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]

SYS模塊

三、hashlib 

用于加密相關(guān)的操作,代替了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()
以上加密算法雖然依然非常厲害,但時(shí)候存在缺陷,即:通過撞庫可以反解。所以,有必要對(duì)加密算法中添加自定義key再來做加密。
import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
還不夠厲害?python 還有一個(gè) hmac 模塊,它內(nèi)部對(duì)我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密
import hmac
h = hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)