目錄python
re模塊提供了正則表達式的相關操做正則表達式
主要字符介紹:shell
.
通配符,除了換行符以外的任意字符安全
^
匹配字符串的開始bash
$
匹配字符串的結尾ide
關於次數的:函數
*
按緊挨着的字符重複無數次, 重複零次或更屢次idea
+
1到無窮次, 重複一次或更屢次spa
?
(0,1) 重複零次或一次操作系統
{n}
重複n次
{n,}
重複n次或更屢次
{n,m}
重複n到m次
其餘的:
[]
字符集
|
或
()
分組
\
轉義
\A
只在字符串開始進行匹配
\Z
只在字符串結尾進行匹配
\b
匹配一個特殊字符邊界, 如空格$
\B
匹配不位於開始或結尾的空字符串
\d
至關於[0-9]
\D
至關於[^0-9]
\s
匹配任意空字符串:[\t\n\r\v]
\S
匹配任意非空白字符:[^\t\n\r\v]
\w
匹配任意數字和字母: [a-zA-Z0-9]
\W
匹配任意非數字和字母: [^a-zA-Z0-9]
. ^ $ * + ? {} 一些用法 import re print(re.findall("a..x","helloalex"))#['alex'] 點匹配任意一個,可是隻能匹配一個 print(re.findall("^a..x","alexhelloworld"))#['alex'] ^ 匹配以什麼開始 print(re.findall("a..x$","helloalex"))#['alex'] $ 匹配以什麼結尾 print(re.findall("alex*","helloalexxxxx"))#['alexxxxx'] * 貪婪匹配 *表示匹配0次或更屢次 print(re.findall("alex+","helloalexxx"))#['alexxx'] +表示匹配1次或更屢次 print(re.findall("alex?","helloalexxxx"))#['alex'] ? 表示匹配0到1次 print(re.findall("alex{1,2}","alexxxx"))#['alexx']
注意:前面的*,+,?等都是貪婪匹配,也就是儘量匹配,後面加?號使其變成惰性匹配
元字符之字符集[]
存在或的關係 至少匹配一個 在字符集中含有特殊意義的只有三個 ^(非) \(轉義) -(範圍) print(re.findall('a[bc]d','acd'))#['acd'] []字符集中有或的概念 print(re.findall('[a-z]','acd'))#['a', 'c', 'd'] #範圍a—z 均可以匹配到 print(re.findall('[.*+]','a.cd+'))# ['.', '+'] print(re.findall('[1-9]','45dha3'))# ['4', '5', '3'] print(re.findall('[^ab]','45bdha3'))# ['4', '5', 'd', 'h', '3'] ^ 表明非的概念 print(re.findall('[\d]','45bdha3'))# ['4', '5', '3'] \d 表示0到9的數字
關於轉義的實例
import re
ret=re.findall('c\l','abc\le')
print(ret) # 報錯
ret=re.findall('c\l','abc\le')
print(ret) # 報錯
ret=re.findall('c\\l','abc\le')
print(ret) #['c\l']
ret=re.findall(r'c\l','abc\le')
print(ret)#['c\l'] # 一張圖解釋爲何要用到這麼多 的緣由
分組() 的用法
print(re.findall(r'(ad)+', 'addad')) # ['ad', 'ad'] ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com') print(ret.group())#23/com print(ret.group('id'))#23
| 或
ret=re.search('(ab)|\d','rabhdg8sd') print(ret.group())#ab 先匹配到哪一個取哪一個 group表示取值
comoile
obj=re.compile('\d{5}') # compile是編譯的意思,編譯好一個規則,再進行調用它 ret=obj.search('abc12345ee') print(ret.group())#12345
serch
print(re.search('al','alvin yuan').group()) # al # 函數會在字符串內查找模式匹配,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠 # 經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。
findall
print(re.findall('a','alvin yuan'))# ['a', 'a'] # 返回全部知足匹配條件的結果,放在列表裏
match
ret = re.match('a','abc').group() # match只是從開始匹配,匹配成功則返回對象 print(ret)
split
ret=re.split('[ab]','abcd') # 先按'a'分割獲得''和'bcd',在對''和'bcd'分別按'b'分割 print(ret)#['', '', 'cd'] # 結果放在列表中
sub(subn)
ret=re.sub('\d','abc','alvin5yuan6',1) # sub裏面至少有個三個參數 依次是 匹配規則 替換內容 源數據 也能夠有四個,最後一個參數是匹配次數 print(ret)#alvinabcyuan6 ret=re.subn('\d','abc','alvin5yuan6') # 顯示匹配了多少次,替換 print(ret)#('alvinabcyuanabc', 2)
finditer
ret=re.finditer('\d','ds3sy4784a') print(ret) #<callable_iterator object at 0x10195f940> print(next(ret).group()) print(next(ret).group()) # 結合迭代器規則,返回的是一個迭代器對象,應用於處理不少的數據,用next的能夠逐一取
?: 是取消優先級 ?P的含義
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir27").group("name")) # alex 註釋 ?P是定義死的 <定義分組名> 後面可根據分組名取值 print(re.findall("www\.(baidu|taobao)\.com","sdaswww.baidu.comsdf")) # ['baidu'] 優先給分組的內容,其實已經匹配到了 print(re.findall("www\.(?:baidu|taobao)\.com","sdaswww.baidu.comsdf")) # ['www.baidu.com'] ?: 表示去掉括號內的優先級
用於便捷記錄日誌且線程安全的模塊
日誌級別大小關係爲:CRITICAL ERROR WARNING INFO DEBUG NOTSET,固然也能夠本身定義日誌級別。
level=logging.DEBUG 設置日誌級別
import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=logging.DEBUG) logging.debug('debug') # 分五個等級 logging.info('info') logging.warning('warning') logging.error('error') logging.critical('critical') logging.log(10,'log')
文件輸出以下:
format 設置輸出格式
%(levelno)s: 打印日誌級別的數值 %(levelname)s: 打印日誌級別名稱 %(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0] %(filename)s: 打印當前執行程序名 %(funcName)s: 打印日誌的當前函數 %(lineno)d: 打印日誌的當前行號 %(asctime)s: 打印日誌的時間 %(thread)d: 打印線程ID %(threadName)s: 打印線程名稱 %(process)d: 打印進程ID %(message)s: 打印日誌信息
datefmt 設置日期格式,同 time.strftime()
%Y 年 %m 月 %D日 %H時 %M分 %S 秒
filename 設置文件路徑
filemode 設置文件打開模式
注:沒有filename和filemode直接輸出
用於提供系統級別的操做
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd os.curdir 返回當前目錄: ('.') os.pardir 獲取當前目錄的父目錄字符串名:('..') os.makedirs('dir1/dir2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 *** os.remove() 刪除一個文件 os.rename("oldname","new") 重命名文件/目錄 *** os.stat('path/filename') 獲取文件/目錄信息,相關信息的介紹 size 文件大小 atime 上次訪問時間 mtime 上次修改時間 ctime 查看建立時間 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所指向的文件或者目錄的最後修改時間
上圖所示, 是獲得:
os.path.dirname是返回上一級目錄
獲取文件大小的三種方式
import os res = os.path.getsize(os.path.join("F:\python\PycharmProjects\date2017.1.8","path_search.py")) print(res) ret = os.stat(os.path.join("F:\python\PycharmProjects\date2017.1.8","path_search.py")).st_size print(ret) f = open(os.path.join("F:\python\PycharmProjects\date2017.1.8","path_search.py"),"rb") print(len(f.read())) 輸出結果相同
os模塊的補充
os.walk(top, topdown=True, onerror=None, followlinks=False) 能夠獲得一個三元tupple(dirpath, dirnames, filenames), 第一個爲起始路徑,第二個爲起始路徑下的文件夾,第三個是起始路徑下的文件。 dirpath 是一個string,表明目錄的路徑, dirnames 是一個list,包含了dirpath下全部子目錄的名字。 filenames 是一個list,包含了非目錄文件的名字。 這些名字不包含路徑信息,若是須要獲得全路徑,須要使用os.path.join(dirpath, name). 經過for循環自動完成遞歸枚舉 # 作個簡單的例子,輸出crm目錄的下全部文件的路徑信息 for a,b,c in os.walk(str(PATH) + os.sep + "crm" ): for item in c: # print(item) print(os.path.join(a,item)) 輸出 F:\python\crm\.idea\.name F:\python\crm\.idea\crm.iml F:\python\crm\.idea\encodings.xml F:\python\crm\.idea\misc.xml F:\python\crm\.idea\modules.xml F:\python\crm\.idea\workspace.xml F:\python\crm\bin\bin.py F:\python\crm\bin\__init__.py F:\python\crm\bin\__pycache__\bin.cpython-35.pyc F:\python\crm\core\admin.py F:\python\crm\core\coures.py F:\python\crm\core\grade.py F:\python\crm\core\school.py F:\python\crm\core\student.py F:\python\crm\core\teacher.py F:\python\crm\core\__init__.py F:\python\crm\core\__pycache__\admin.cpython-35.pyc F:\python\crm\core\__pycache__\coures.cpython-35.pyc F:\python\crm\core\__pycache__\grade.cpython-35.pyc F:\python\crm\core\__pycache__\school.cpython-35.pyc F:\python\crm\core\__pycache__\student.cpython-35.pyc F:\python\crm\core\__pycache__\teacher.cpython-35.pyc F:\python\crm\core\__pycache__\__init__.cpython-35.pyc F:\python\crm\db\admin\alex F:\python\crm\db\coures\23eeeb4347bdd26bfc6b7ee9a3b755dd F:\python\crm\db\coures\34d1f91fb2e514b8576fab1a75a89a6b F:\python\crm\db\coures\c71e8d17d41c21de0d260881d69662ff F:\python\crm\db\coures\df5fb5e33c5585bb0c48107c57cece9b F:\python\crm\db\coures\e206a54e97690cce50cc872dd70ee896 F:\python\crm\db\grade\270c42ba7614f1a475f61dfcb397a621 F:\python\crm\db\grade\817ee0b8010393ff3b4483e703663551 F:\python\crm\db\school\17811d3caeff9648f48b5a553c806c63 F:\python\crm\db\school\b035c88ee6f5270ccff67a591d0e21ec F:\python\crm\db\school\bb0ac3d8eb8f2c2f6fe336c5e9957392 F:\python\crm\db\school\e523d5f211747bdfc742f50463577f74 F:\python\crm\db\student\6e7e12c264fb3e1f456b0782f47e4af6 F:\python\crm\db\student\a0b5e2d3a97d7a19ec6d2da830f609b2 F:\python\crm\db\student\a995b03ed63f8c7128a83c984b89aa50 F:\python\crm\db\student\fe01b2ba5ec0146e5d4b0885822556ef F:\python\crm\db\student\ff4916088e836d268a9d72f8929bac06 F:\python\crm\db\teacher\08319d4fed47c8ed828ebabd5a91563b F:\python\crm\db\teacher\0d1d5cd3623144f692fb771580b92288 F:\python\crm\db\teacher\5d00d0762936aedda519d63c2e4a2a40 F:\python\crm\db\teacher\6a7ece82e4ed94a475dab275891d5036 F:\python\crm\lib\ceshi.py F:\python\crm\lib\readme F:\python\crm\lib\readwrite.py F:\python\crm\lib\__init__.py F:\python\crm\lib\__pycache__\readwrite.cpython-35.pyc F:\python\crm\lib\__pycache__\__init__.cpython-35.pyc