python筆記--內置模塊
python常用內置模塊
類似於函數式編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個復雜的功能來說,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個.py文件組成的代碼集合就稱為模塊。
模塊分為三種:自定義模塊、內置模塊、開源模塊http://pypi.python.org
一、導入模塊
方法:
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
導入模塊其實就是告訴Python解釋器去解釋那個py
那麽問題來了,導入模塊時是根據那個路徑作為基準來進行的呢?即:sys.path
如果sys.path路徑列表沒有你想要的路徑,可以通過 sys.path.append(‘路徑‘) 添加。可以通過os模塊獲得路徑,例如:
import sys import os pre_path = os.path.abspath(‘../‘) sys.path.append(pre_path)
二、第三方模塊的下載安裝
兩種方法:
使用pip工具,具體使用方法,可以參照:
http://blog.csdn.net/olanlanxiari/article/details/48086917
下載源碼包,解壓後進入解壓目錄,依次執行:
python setup.py build python setup.py install
三、內置模塊
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,否則返回False
os.path.isfile(path) 如果path是一個存在的文件,返回True,否則返回False
os.path.isdir(path) 如果path是一個存在的目錄,則返回True,否則返回False
os.path.islink(path) 如果path是一個鏈接目錄,返回True,否則返回False
os.path.ismount(path) 如果path掛載了設備,返回True,否則返回False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,常用於拼接路徑
os.path.getatime(path) 返回path所指向的文件或者目錄的最後訪問時間
os.path.getctime(path) 返回path所指向的文件或者目錄的最後變化時間
os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
os.walk(path) 目錄生成器返回格式:(dirpath,[dirnames],[filenames]),例如:
>>> import os >>> for ROOT,DIR,FILE in os.walk(‘/root/test‘): ... print ROOT ... print DIR ... print FILE ... /root/test [‘lala‘] [‘test.txt‘, ‘001.txt‘, ‘002.py‘] /root/test/lala [] [‘003.txt‘] #我們可以看一下/root/test的目錄結構: [[email protected] ~]# tree /root/test /root/test ├── 001.txt ├── 002.py ├── lala │ └── 003.txt └── test.txt -> test.txt 1 directory, 4 files
sys,用於提供對解釋器相關的操作
sys.argv 命令行參數,結果是個列表,第一個元素是程序名,之後的元素是執行程序攜帶的參數。例如:
[[email protected] /]# cat /root/test.py #!/usr/bin/env python # -*- coding:utf-8 -*- import sys print sys.argv print sys.argv[0] print sys.argv[1] print sys.argv[2] [[email protected] /]# python /root/test.py a b c [‘/root/test.py‘, ‘a‘, ‘b‘, ‘c‘] /root/test.py #argv[0] a #argv[1] b #argv[2]
sys.exit() 執行到sys.exit()時,退出程序,括號中可以加上數字,sys.exit(0)表示正常退出。
sys.version 返回Python解釋程序的版本信息
sys.maxint 返回最大的Int值
sys.path 返回模塊的搜索路徑,以列表的形式,可以追加自定義路徑。
sys.platform 返回操作系統平臺名稱
sys.stdin.readline() 標準輸入,例如:
>>> name=sys.stdin.readline() FJC #手動輸入 >>> print name FJC
sys.stdout.write(‘內容’) 標準輸出
sys.stdout.flush() 配合time.sleep(1)實現實時輸出信息,例如:
>>> import sys >>> import time >>> for i in range(3): ... print i, ... sys.stdout.flush() ... time.sleep(1) 0 1 2 #每隔一秒輸出一個數字
shutil,高級的 文件、文件夾、壓縮包 處理模塊
shutil.copyfileobj(fsrc, fdst[, length])
將文件內容拷貝到另一個文件中,可以部分內容
#註意! 在其中fsrc,fdst都是文件對象,都需要打開後才能進行復制操作,例如:
[[email protected] ~]# cat test1 test1 [[email protected] ~]# cat test2 [[email protected] ~]# python >>> n=open(‘test1‘,‘r+‘) >>> m=open(‘test2‘,‘a+‘) >>> import shutil >>> shutil.copyfileobj(n,m) >>> n.close <built-in method close of file object at 0x7fd57bd165d0> >>> m.close <built-in method close of file object at 0x7fd57bd16660> >>> quit() [[email protected] ~]# cat test2 test1
shutil.copyfile(src, dst)
僅拷貝文件到文件或目錄
shutil.copymode(src, dst)
僅拷貝權限,內容、組、用戶均不變
shutil.copystat(src, dst)
拷貝狀態的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst)
拷貝文件和權限
shutil.copy2(src, dst)
拷貝文件和狀態信息
shutil.ignore_patterns(*patterns)#忽略的參數
shutil.copytree(src, dst, symlinks=True, ignore=None) #symlinks=True表示原目錄中的符號鏈接文件會被直接復制到目標目錄中;symlinks=False表示會將原目錄中符號鏈接文件的正本文件復制到目標目錄中。
遞歸的去拷貝文件,例如:
[[email protected] ~]# tree test test ├── 001.txt ├── 002.py └── lala └── 003.txt 1 directory, 3 files #遞歸拷貝,註意目標目錄不能實現建立,否則會報錯 >>> from shutil import * >>> copytree(‘test‘,‘test1‘,ignore=ignore_patterns(‘*.py‘)) [[email protected] ~]# tree test1 test1 ├── 001.txt └── lala └── 003.txt 1 directory, 2 files
shutil.rmtree(path[, ignore_errors[, onerror]])
遞歸的去刪除文件
shutil.move(src, dst)
遞歸的去移動文件
python3.0+版本
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
創建壓縮包並返回文件路徑及名稱。
base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑。
format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要壓縮的文件夾路徑(默認當前目錄)
owner: 用戶,默認當前用戶
group: 組,默認當前組
logger: 用於記錄日誌,通常是logging.Logger對象
例如:
>>> os.chdir(‘c:\\‘) >>> ret=shutil.make_archive(‘www‘,‘zip‘,root_dir=‘c:\\test‘) >>> ret ‘c:\\www.zip‘ #表示將c:\\test目錄下的文件壓縮,保存到當前目錄,命名為www >>> ret=shutil.make_archive(‘c:\\www\\myfile‘,‘zip‘,root_dir=‘c:\\test‘) >>> ret ‘c:\\www\\myfile.zip‘ #表示將c:\\test目錄下的文件壓縮,保存到c:\\www目錄下,命名為myfile
shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的。
>>> import zipfile #壓縮 >>> z=zipfile.ZipFile(‘test.zip‘,‘w‘) >>> z.write(‘a.log‘) >>> z.write(‘b.data‘) >>> z.close() # 解壓 >>> z = zipfile.ZipFile(‘test.zip‘, ‘r‘) >>> z.extractall() >>> z.close() >>> import tarfile #壓縮 >>> tar=tarfile.open(‘my.tar‘,‘w‘) >>> tar.add(‘a.log‘,arcname=‘aa.log‘) #arcname可以改變文件壓縮後的名稱 >>> tar.add(‘b.data‘,arcname=‘bb.data‘) >>> tar.close() #解壓 # 解壓 >>> tar = tarfile.open(‘your.tar‘,‘r‘) >>> tar.extractall() #可設置解壓地址 >>> tar.close()
random,用於生成隨機數
random.random()
返回隨機數,在0和1範圍內
random.randint(1,3)
返回隨機整數,在1和3範圍內,包括1和3
random.randrange(1,10)
返回隨機整數,在1和10範圍內,不包括10
random.randrange(1,10,2)
末尾的2表示跳數,每隔兩個取一個數,起始位置為1,所以這個結果就是1~10之間的隨機奇數。
random.sample(array,n)
表示從一個數組中隨機取出n個元素,例如:
>>> import random >>> random.sample([1,2,3,4],1) [3]
hashlib,提供常見的摘要算法,如:MD5、SHA1等
>>> import hashlib >>> test=hashlib.md5() >>> test.update(‘how to use md5 in python hashlib?‘) >>> print test.hexdigest() d26a53750bc40b38b65a520292f69306
如果,數據量很大,可以分塊多次調用update(),最後的計算結果是一樣的。
>>> test2=hashlib.md5() >>> test2.update(‘how to use md5 ‘) >>> test2.update(‘in python hashlib?‘) >>> print test2.hexdigest() d26a53750bc40b38b65a520292f69306
shelve,簡單的數據存儲方案
只有一個函數open(),這個函數接收一個參數就是文件名,然後返回一個shelf對象,你可以用他來存儲東西,就可以簡單的把他當作一個字典,key必須為字符串,而值可以是python所支持的數據。當你存儲完畢的時候,就調用close函數來關閉。
>>> import shelve >>> s=shelve.open(‘test.txt‘) >>> s[‘x‘]=[1,2,3] >>> s[‘y‘]=[4,5,6] >>> s[‘x‘] [1, 2, 3] #不過有個小問題,例如: >>> s[‘x‘].append(4) >>> s[‘x‘] [1, 2, 3]
新添加的元素到哪裏去了呢?其實,元素4沒有寫回,你把[1,2,3]存到了x,當你再次讀取s[‘x‘]的時候,s[‘x‘]只是一個拷貝,而你沒有將拷貝寫回,所以當你再次讀取s[‘x‘]的時候,它又從源中讀取了一個拷貝,所以,你新修改的內容並不會出現在拷貝中,解決的辦法就是,利用一個緩存的變量,例如:
>>> temp=s[‘x‘] >>> temp.append(4) >>> s[‘x‘]=temp >>> s[‘x‘] [1, 2, 3, 4]
time,時間訪問和轉換
time.time() 返回當前時間的時間戳(1970紀元後經過的浮點秒數)。
time.localtime([時間戳]) 轉換時間戳為一個時間元組,沒有參數是指當前時間。例如:
>>> a=time.localtime() >>> type(a) <type ‘time.struct_time‘> >>> a time.struct_time(tm_year=2017, tm_mon=5, tm_mday=23, tm_hour=18, tm_min=11, tm_sec=30, tm_wday=1, tm_yday=143, tm_isdst=0)
time.asctime([tuple]) 轉換時間元組為一個可讀性好的格式,沒有參數是指當前時間。例如:
>>> time.asctime(time.localtime()) ‘Tue May 23 18:26:25 2017‘
time.ctime(時間戳) 轉換時間戳為一個可讀性好的格式,沒有參數是指當前時間。例如:
>>> time.ctime(time.time()) ‘Tue May 23 18:28:46 2017‘
time.sleep(seconds) 按照給定的秒數延遲執行,參數可以是整數或浮點數。
time.strftime(format[,tuple]) 將元組時間轉換成指定格式,沒有tuple是定當前時間。例如:
>>> time.strftime(‘%Y-%m-%d %H:%M:%S‘) ‘2017-05-23 18:39:44‘ >>> time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(12345)) ‘1970-01-01 11:25:45‘
re,正則表達式
re.match(pattern, string) 僅從字符串頭開始匹配,例如:
>>> re.match(‘abc‘,‘1abc2abc‘)#沒有結果 >>> a=re.match(‘abc‘,‘abc1abc2abc‘) >>> a.group() ‘abc‘
re.search(pattern, string) 匹配整個字符串,直到找到一個匹配,例如:
>>> b=re.search(‘abc‘,‘1abc2abc‘) >>> b.group() ‘abc‘
re.findall(pattern, string) 找到所有要匹配的字符並返回列表格式,例如:
>>> re.findall(‘abc‘,‘1abc2abc‘)#註意返回結果是一個列表 [‘abc‘, ‘abc‘]
re.complie(string) 生成要匹配的正則對象,例如:
>>> c=re.compile(‘abc‘)#參數可以是各種正則表達式,提前編譯。 >>> d=c.match(‘abc1abc2abc‘)#匹配時直接調用,提高了性能。 >>> d.group() ‘abc‘
re.sub(pattern, repl, string, count,flag) 替換匹配到的字符,即對字符串string按照pattern匹配,得到的替換為repl,替換個數為count,flag表示匹配模式,例如:
>>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee",count=2 ) ‘aaa|bbb|ccc3ddd4eee‘ >>> re.sub("[0-9]","|", "aaa1bbb2ccc3ddd4eee") #不指定count表示替換所有匹配的 ‘aaa|bbb|ccc|ddd|eee‘
flag的類型:
1).re.I(re.IGNORECASE): 忽略大小寫
2).re.M(MULTILINE): 多行模式,改變’^’和’$’的行為
3).re.S(DOTALL): 點任意匹配模式,改變’.’的行為
4).re.L(LOCALE): 使預定字符類 \w \W \b \B \s \S 取決於當前區域設定
5).re.U(UNICODE): 使預定字符類 \w \W \b \B \s \S \d \D 取決於unicode定義的字符屬性
6).re.X(VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字符,並可以加入註釋。
註:
正則表達式實例:
字符匹配
python 匹配 "python".
字符類
[Pp]ython 匹配 "Python" 或 "python"
rub[ye] 匹配 "ruby" 或 "rube"
[aeiou] 匹配中括號內的任意一個字母
[0-9] 匹配任何數字。類似於 [0123456789]
[a-z] 匹配任何小寫字母
[A-Z] 匹配任何大寫字母
[a-zA-Z0-9] 匹配任何字母及數字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了數字外的字符
特殊字符類
. 匹配除 "\n" 之外的任何單個字符。要匹配包括 ‘\n‘ 在內的任何字符,請使用象 ‘[.\n]‘ 的模式。
\d 匹配一個數字字符。等價於 [0-9]。
\D 匹配一個非數字字符。等價於 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價於 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價於 [^ \f\n\r\t\v]。
\w 匹配包括下劃線的任何單詞字符。等價於‘[A-Za-z0-9_]‘。
\W 匹配任何非單詞字符。等價於 ‘[^A-Za-z0-9_]‘。
參考練習:
1.批量改名:
目錄下abc_001.txt
abc_002.txt
abc_003.txt
abc_004.txt
abc_005.txt
改名為:001.txt
002.txt
003.txt
004.txt
005.txt
#!/usr/bin/env python import os for x,y,z in os.walk("."): for i in z: a="".join(list(i)[4:]) os.rename(i,a)
2.隨機生成6個包含大寫字母、小寫字母、數字的字符串:
#!/usr/bin/env python a=range(65,91) b=range(97,123) c=range(48,58) a.extend(b) a.extend(c) import random c=[] for i in range(6): d=chr (random.sample(a,1)[0]) c.append(d) print "".join(c)
本文出自 “網絡技術” 博客,請務必保留此出處http://fengjicheng.blog.51cto.com/11891287/1928788
python筆記--內置模塊