Python之模块
?
模塊:是實現(xiàn)某一功能的代碼的集合,類似于一個函數(shù)。模塊在使用時直接導入即可。
導入模塊,其實就是告訴python解釋器去解釋這個導入的py文件。若導入的是一個包,則python解釋器去解釋該包里面的__init__.py文件。
模塊導入的時候,是以sys.path作為基準。
>>> import sys >>> print sys.path ['', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/MySQL_python-1.2.4b4-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pandas-0.16.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/numpy-1.9.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pytz-2015.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/python_dateutil-2.4.2-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] View Code一、開源模塊
導入開源模塊時,需要現(xiàn)安裝該模塊包。
兩種安裝方式:
1、在線安裝:yum、pip、apt-get
2、編譯安裝:下載源碼包->解壓->編譯(python setup.py build)->安裝(python setup.py install)
確認安裝成功后,即可導入使用。
eg:
安裝:
# 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# 進入python環(huán)境,導入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環(huán)境,導入paramiko檢查是否安裝成功 安裝paramiko模塊?
使用:
#!/usr/bin/env python #coding:utf-8import paramikossh = 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(); 通過帳號連接服務器?
二、內(nèi)置模塊
1、os模塊
主要用于系統(tǒng)管理的操作
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 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\\",Linux下為"/" os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n" os.pathsep 輸出用于分割文件路徑的字符串 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' os.system("bash command") 運行shell命令,直接顯示 os.environ 獲取系統(tǒng)環(huán)境變量 os.path.abspath(path) 返回path規(guī)范化的絕對路徑 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[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間 os模塊常用命令2、sys模塊
主要用于對解釋器相關的操作
sys.argv 命令行參數(shù)List,第一個元素是程序本身路徑 sys.exit(n) 退出程序,正常退出時exit(0) sys.version 獲取Python解釋程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值 sys.platform 返回操作系統(tǒng)平臺名稱 sys.stdout.write('please:') val = sys.stdin.readline()[:-1] sys常用命令3、pickle模塊
主要用于序列化的操作
pickle:python特有類型和python數(shù)據(jù)類型之間的轉換
該模塊有dump、dumps、load、loads四個方法
pickle.dumps 將數(shù)據(jù)通過特殊的形式轉換成只有pyton才能識別的字符串。
>>> import pickle >>> data = {'1':123,'2':456} >>> print pickle.dumps(data) (dp0 S'1' p1 I123 sS'2' p2 I456 s. pickle.dumpspickle.dump 主要對文件進行操作,它將數(shù)據(jù)過特殊的形式轉換成只有pyton才能識別的字符串,并寫入文件。
>>> with open('result.pk','w') as f: ... pickle.dump(data,f) ... >>> pickle.dumppickle.loads 與dumps相對應,將特殊的字符串轉換成python中的數(shù)據(jù)類型。
>>> import pickle >>> s = [1,2,3,4] >>> p1 = pickle.dumps(s) >>> print p1 (lp0 I1 aI2 aI3 aI4 a. >>> s1 = pickle.loads(p1) >>> print s1 [1, 2, 3, 4] pickle.loadspickle.load 與dump相對應,將特殊字符串的文件抓換成字符串。
>>> import pickle >>> f = open('result.pk','r') >>> s = pickle.load(f) >>> print s {'1': 123, '2': 456} pickle.load4、logging模塊
用于日志記錄
eg:
import logginglogging.warning("user [alex] attempted wrong password more than 3 times") logging.critical("server is down")#輸出 WARNING:root:user [alex] attempted wrong password more than 3 times CRITICAL:root:server is down logging把日志寫入文件:
import logginglogging.basicConfig(filename='example.log',level=logging.INFO) logging.debug('This message should go to the log file') logging.info('So should this') logging.warning('And this, too') write log into file其中下面這句中的level=loggin.INFO意思是,把日志紀錄級別設置為INFO,也就是說,只有比日志是INFO或比INFO級別更高的日志才會被紀錄到文件里,在這個例子, 第一條日志是不會被紀錄的,如果希望紀錄debug的日志,那把日志級別改成DEBUG就行了。
logging.basicConfig(filename='example.log',level=logging.INFO)加上時間:
import logging logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S') logging.warning('is when this event was logged.')5、time模塊
與時間有關的操作
時間有三種表示方式:
- 時間戳 ? ? ? ? ? ? ? 1970年1月1日之后的秒,即:time.time()
- 格式化的字符串 ? ?2014-11-11 11:11, ? ?即:time.strftime('%Y-%m-%d')
- 結構化時間 ? ? ? ? ?元組包含了:年、日、星期等... time.struct_time ? ?即:time.localtime()
eg:
>>> import time >>> print time.time() 1457588586.28 >>> print time.mktime(time.localtime()) 1457588652.0 >>> print time.gmtime() time.struct_time(tm_year=2016, tm_mon=3, tm_mday=10, tm_hour=5, tm_min=44, tm_sec=33, tm_wday=3, tm_yday=70, tm_isdst=0) >>> print time.strftime('%Y-%m-%d') 2016-03-10>>> import datetime >>> print datetime.datetime.now() 2016-03-10 13:49:32.833639 >>> print datetime.datetime.now() - datetime.timedelta(days=1) 2016-03-09 13:50:25.230468 time6、re模塊
用于正則匹配
字符:
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
次數(shù):
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次
match(pattern, string, flags=0)
從起始位置開始根據(jù)模型去字符串中匹配指定內(nèi)容,匹配單個.
- 正則表達式
- 要匹配的字符串
- 標志位,用于控制正則表達式的匹配方式
search(pattern, string, flags=0)
根據(jù)模型去字符串中匹配指定內(nèi)容,匹配單個。
>>> obj = re.search('\d+','u12323fdkfl') >>> print obj.group() 12323findall(pattern, string, flags=0)
上述兩中方式均用于匹配單值,即:只能匹配字符串中的一個,如果想要匹配到字符串中所有符合條件的元素,則需要使用?findall。
>>> obj = re.findall('\d+','fdf343dfldfj098dfdf') >>> print obj ['343', '098']sub(pattern, repl, string, count=0, flags=0)
用于替換匹配的字符串
>>> content = '123jkfjkf678' >>> new_content = re.sub('\d+','sb',content)#將數(shù)字替換成'sb' >>> print new_content sbjkfjkfsbsplit(pattern, string, maxsplit=0, flags=0)
根據(jù)指定匹配進行分組
?
>>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'" >>> new_content = re.split('\*',content) >>> print new_content ["'1-2", '((60-30+1', '(9-2', '5/3+7/3', '99/4', '2998+10', '568/14))-(-4', '3)/(16-3', "2))'"] >>> >>> new_content = re.split('[\+\-\*\/]+',content) >>> print new_content ["'1", '2', '((60', '30', '1', '(9', '2', '5', '3', '7', '3', '99', '4', '2998', '10', '568', '14))', '(', '4', '3)', '(16', '3', "2))'"] >>>>>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'" >>> content = re.sub('\s*','',content) >>> new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)',content,1) >>> print new_content ["'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-", '-4*3', "/(16-3*2))'"] re.split7、random模塊
主要生成隨機數(shù)
>>> import random >>> print random.random() 0.645138583945 >>> print random.randint(1,4) 3 >>> print random.randrange(1,20) 10生成驗證碼
>>> import random >>> checkcode = '' >>> for i in range(4): ... current = random.randrange(0,4) ... if current != i: ... temp = chr(random.randint(65,90)) ... else: ... temp = random.randint(0,9) ... checkcode +=str(temp) ... >>> print checkcode PBXE?
轉載于:https://www.cnblogs.com/ahaii/p/5261823.html
總結
- 上一篇: Ext.Net学习笔记10:Ext.Ne
- 下一篇: websocket python爬虫_p