1.1 例如:print(hex(2))案例
創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元清河做網(wǎng)站,已為上家服務(wù),為清河各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
1.2 輸出函數(shù):print(hex(2))
1.3 輸出結(jié)果:0x2
1.4 解析說明:返回16進(jìn)制的數(shù)。
2.1 例如:print(chr(10))案例
2.2 輸出函數(shù):print(chr(10))
2.3 輸出結(jié)果:0o12
2.4 解析說明:返回當(dāng)前整數(shù)對應(yīng)的ASCll碼
3.1 例如:print(ord("b"))案例
3.2 輸出函數(shù):print(ord("b"))
3.3 輸出結(jié)果:98
3.4 解析說明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)
4.1 例如:print(chr(97))
4.2 輸出函數(shù):print(chr(97))
4.3 輸出結(jié)果:b
4.4 解析說明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)。
案例一:給你一個(gè)字符串,s = 'hello kitty'
1.1 輸出函數(shù):print(s.capitalize())
1.2 輸出結(jié)果:0x2
1.3 解析說明:返回16進(jìn)制的數(shù)。
2.1輸出函數(shù):print(s.replace('kitty','kuang'))
2.2 輸出結(jié)果:hello kuang
2.3 解析說明:替換功能,將kitty換成kuang。
2.4 輸出函數(shù):print(s.replace('4','KK'))
2.5 輸出結(jié)果:12KK12KK
2.6 解析說明:所有的4都替換成KK
2.7 輸出函數(shù):print(s.replace('4','KK'))
2.8 輸出結(jié)果:12KK12KK124
2.9 解析說明:將前兩個(gè)的4替換成go
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.1 輸出函數(shù):print(ip.split(','))
3.2 輸出結(jié)果:['192.168.1.1']
3.3 解析說明:將字符串分割成列表
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.3 輸出函數(shù):print(ip.split(',',2))
3.4 輸出結(jié)果:['192.168.1.1']
3.5 解析說明:從第二個(gè)開始分割成列表
一些python常用函數(shù)包:
1、Urllib3
Urllib3是一個(gè) Python 的 HTTP 客戶端,它擁有 Python 標(biāo)準(zhǔn)庫中缺少的許多功能:
線程安全
連接池
客戶端 SSL/TLS 驗(yàn)證
使用分段編碼上傳文件
用來重試請求和處理 HTTP 重定向的助手
支持 gzip 和 deflate 編碼
HTTP 和 SOCKS 的代理支持
2、Six
six 是一個(gè)是 Python 2 和 3 的兼容性庫。這個(gè)項(xiàng)目旨在支持可同時(shí)運(yùn)行在 Python 2 和 3 上的代碼庫。它提供了許多可簡化 Python 2 和 3 之間語法差異的函數(shù)。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底層接口。Botocore是 Boto3 庫(#22)的基礎(chǔ),后者讓你可以使用 Amazon S3 和 Amazon EC2 一類的服務(wù)。Botocore 還是 AWS-CLI 的基礎(chǔ),后者為 AWS 提供統(tǒng)一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 傳輸?shù)?Python 庫。它正在積極開發(fā)中,其介紹頁面不推薦人們現(xiàn)在使用,或者至少等版本固定下來再用,因?yàn)槠?API 可能發(fā)生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項(xiàng)目都依賴s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母遞歸縮寫。
pip很容易使用。要安裝一個(gè)包只需pip install package name即可,而刪除包只需pip uninstall package name即可。
最大優(yōu)點(diǎn)之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細(xì)規(guī)范。大多數(shù) Python 項(xiàng)目都包含這樣的文件。
如果結(jié)合使用pip與virtualenv(列表中的 #57),就可以創(chuàng)建可預(yù)測的隔離環(huán)境,同時(shí)不會干擾底層系統(tǒng),反之亦然。
5、Python-dateutil
python-dateutil模塊提供了對標(biāo)準(zhǔn)datetime模塊的強(qiáng)大擴(kuò)展。我的經(jīng)驗(yàn)是,常規(guī)的Python datetime缺少哪些功能,python-dateutil就能補(bǔ)足那一塊。
6、Requests
Requests建立在我們的 #1 庫——urllib3基礎(chǔ)上。它讓 Web 請求變得非常簡單。相比urllib3來說,很多人更喜歡這個(gè)包。而且使用它的最終用戶可能也比urllib3更多。后者更偏底層,并且考慮到它對內(nèi)部的控制級別,它一般是作為其他項(xiàng)目的依賴項(xiàng)。
7、Certifi
近年來,幾乎所有網(wǎng)站都轉(zhuǎn)向 SSL,你可以通過地址欄中的小鎖符號來識別它。加了小鎖意味著與該站點(diǎn)的通信是安全和加密的,能防止竊聽行為。
8、Idna
根據(jù)其 PyPI 頁面,idna提供了“對 RFC5891 中指定的應(yīng)用程序中國際化域名(IDNA)協(xié)議的支持?!?/p>
IDNA的核心是兩個(gè)函數(shù):ToASCII和ToUnicode。ToASCII會將國際 Unicode 域轉(zhuǎn)換為 ASCII 字符串。ToUnicode則逆轉(zhuǎn)該過程。在IDNA包中,這些函數(shù)稱為idna.encode()和idna.decode()
9、PyYAML
YAML是一種數(shù)據(jù)序列化格式。它的設(shè)計(jì)宗旨是讓人類和計(jì)算機(jī)都能很容易地閱讀代碼——人類很容易讀寫它的內(nèi)容,計(jì)算機(jī)也可以解析它。
PyYAML是 Python 的YAML解析器和發(fā)射器,這意味著它可以讀寫YAML。它會把任何 Python 對象寫成YAML:列表、字典,甚至是類實(shí)例都包括在內(nèi)。
10、Pyasn1
像上面的IDNA一樣,這個(gè)項(xiàng)目也非常有用:
ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實(shí)現(xiàn)
所幸這個(gè)已有數(shù)十年歷史的標(biāo)準(zhǔn)有很多信息可用。ASN.1是 Abstract Syntax Notation One 的縮寫,它就像是數(shù)據(jù)序列化的教父。它來自電信行業(yè)。也許你知道協(xié)議緩沖區(qū)或 Apache Thrift?這就是它們的 1984 年版本。
11、Docutils
Docutils是一個(gè)模塊化系統(tǒng),用來將純文本文檔處理為很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似于 MarkDown 的易讀標(biāo)記語法。
12、Chardet
你可以用chardet模塊來檢測文件或數(shù)據(jù)流的字符集。比如說,需要分析大量隨機(jī)文本時(shí),這會很有用。但你也可以在處理遠(yuǎn)程下載的數(shù)據(jù),但不知道用的是什么字符集時(shí)使用它。
13、RSA
rsa包是一個(gè)純 Python 的 RSA 實(shí)現(xiàn)。它支持:
加密和解密
簽名和驗(yàn)證簽名
根據(jù) PKCS#1 1.5 版生成密鑰
它既可以用作 Python 庫,也能在命令行中使用。
14、Jmespath
JMESPath,發(fā)音為“James path”,使 Python 中的 JSON 更容易使用。它允許你聲明性地指定如何從 JSON 文檔中提取元素。
15、Setuptools
它是用于創(chuàng)建 Python 包的工具。不過,其文檔很糟糕。它沒有清晰描述它的用途,并且文檔中包含無效鏈接。最好的信息源是這個(gè)站點(diǎn),特別是這個(gè)創(chuàng)建 Python 包的指南。
16、Pytz
像dateutils一樣,這個(gè)庫可幫助你處理日期和時(shí)間。有時(shí)候,時(shí)區(qū)處理起來可能很麻煩。幸好有這樣的包,可以讓事情變得簡單些。
17、Futures
從 Python 3.2 開始,python 提供current.futures模塊,可幫助你實(shí)現(xiàn)異步執(zhí)行。futures 包是該庫適用于 Python 2 的 backport。它不適用于 Python3 用戶,因?yàn)?Python 3 原生提供了該模塊。
18、Colorama
使用 Colorama,你可以為終端添加一些顏色:
更多Python知識請關(guān)注Python自學(xué)網(wǎng)
【常見的內(nèi)置函數(shù)】
1、enumerate(iterable,start=0)
是python的內(nèi)置函數(shù),是枚舉、列舉的意思,對于一個(gè)可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值。
2、zip(*iterables,strict=False)
用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長度與最短的對象相同,利用*號操作符,可以將元組解壓為列表。
3、filter(function,iterable)
filter是將一個(gè)序列進(jìn)行過濾,返回迭代器的對象,去除不滿足條件的序列。
4、isinstance(object,classinfo)
是用來判斷某一個(gè)變量或者是對象是不是屬于某種類型的一個(gè)函數(shù),如果參數(shù)object是classinfo的實(shí)例,或者object是classinfo類的子類的一個(gè)實(shí)例,
返回True。如果object不是一個(gè)給定類型的的對象, 則返回結(jié)果總是False
5、eval(expression[,globals[,locals]])
用來將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果,表達(dá)式解析參數(shù)expression并作為Python表達(dá)式進(jìn)行求值(從技術(shù)上說是一個(gè)條件列表),采用globals和locals字典作為全局和局部命名空間。
【常用的句式】
1、format字符串格式化
format把字符串當(dāng)成一個(gè)模板,通過傳入的參數(shù)進(jìn)行格式化,非常實(shí)用且強(qiáng)大。
2、連接字符串
常使用+連接兩個(gè)字符串。
3、if...else條件語句
Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊。其中if...else語句用來執(zhí)行需要判斷的情形。
4、for...in、while循環(huán)語句
循環(huán)語句就是遍歷一個(gè)序列,循環(huán)去執(zhí)行某個(gè)操作,Python中的循環(huán)語句有for和while。
5、import導(dǎo)入其他腳本的功能
有時(shí)需要使用另一個(gè)python文件中的腳本,這其實(shí)很簡單,就像使用import關(guān)鍵字導(dǎo)入任何模塊一樣。
8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來梳理下8個(gè)好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個(gè)集合,集合里的元素是無序且不重復(fù)的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對任何可迭代對象進(jìn)行排序,并返回列表。對列表升序操作:
對元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時(shí)候,假如要對序列里的每個(gè)單詞進(jìn)行大寫轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。
map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對列表里的每個(gè)數(shù)字作平方處理:
6、reduce()前面說到對列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。
reduce()會對參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個(gè)迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個(gè)場景,同時(shí)打印出序列里每一個(gè)元素和它對應(yīng)的順序號,我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說明,對字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。
1、get() 返回指定鍵的值,如果值不在字典中返回default值。
語法:dict.get(key,default=None)
參數(shù):
key 字典中要查找的鍵。
default 如果指定鍵的值不存在時(shí),返回該默認(rèn)值值。
例:
dict={'Name':'alex','Age':21}
print("Name is:%s"% dict.get('Name')+"\n"+ "Age is:%d"% dict.get('Age'))
顯示結(jié)果為:
Name is:alex
Age is:21
2、update() 將一個(gè)字典中的值更新到另一個(gè)字典中。
語法:dict.update(dict2)
參數(shù):
dict2 添加到指定字典dict里的字典。
例:
dict={'Name':'alex','Age':21}
dict2={'Sex':'female'}
dict.update(dict2)
print("Value is %s" % dict)
顯示結(jié)果為:
Value is {'Name': 'alex', 'Age': 21, 'Sex': 'female'}
1.常用內(nèi)置函數(shù):(不用import就可以直接使用)
help(obj) 在線幫助, obj可是任何類型
callable(obj) 查看一個(gè)obj是不是可以像函數(shù)一樣調(diào)用
repr(obj) 得到obj的表示字符串,可以利用這個(gè)字符串eval重建該對象的一個(gè)拷貝
eval_r(str) 表示合法的python表達(dá)式,返回這個(gè)表達(dá)式
dir(obj) 查看obj的name space中可見的name
hasattr(obj,name) 查看一個(gè)obj的name space中是否有name
getattr(obj,name) 得到一個(gè)obj的name space中的一個(gè)name
setattr(obj,name,value) 為一個(gè)obj的name space中的一個(gè)name指向vale這個(gè)object
delattr(obj,name) 從obj的name space中刪除一個(gè)name
vars(obj) 返回一個(gè)object的name space。用dictionary表示
locals() 返回一個(gè)局部name space,用dictionary表示
globals() 返回一個(gè)全局name space,用dictionary表示
type(obj) 查看一個(gè)obj的類型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子類
類型轉(zhuǎn)換函數(shù)
chr(i) 把一個(gè)ASCII數(shù)值,變成字符
ord(i) 把一個(gè)字符或者unicode字符,變成ASCII數(shù)值
oct(x) 把整數(shù)x變成八進(jìn)制表示的字符串
hex(x) 把整數(shù)x變成十六進(jìn)制表示的字符串
str(obj) 得到obj的字符串描述
list(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)list
tuple(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)tuple
dict(),dict(list) 轉(zhuǎn)換成一個(gè)dictionary
int(x) 轉(zhuǎn)換成一個(gè)integer
long(x) 轉(zhuǎn)換成一個(gè)long interger
float(x) 轉(zhuǎn)換成一個(gè)浮點(diǎn)數(shù)
complex(x) 轉(zhuǎn)換成復(fù)數(shù)
max(...) 求最大值
min(...) 求最小值
用于執(zhí)行程序的內(nèi)置函數(shù)
complie 如果一段代碼經(jīng)常要使用,那么先編譯,再運(yùn)行會更快。
2.和操作系統(tǒng)相關(guān)的調(diào)用
系統(tǒng)相關(guān)的信息模塊 import sys
sys.argv是一個(gè)list,包含所有的命令行參數(shù).
sys.stdout sys.stdin sys.stderr 分別表示標(biāo)準(zhǔn)輸入輸出,錯(cuò)誤輸出的文件對象.
sys.stdin.readline() 從標(biāo)準(zhǔn)輸入讀一行 sys.stdout.write("a") 屏幕輸出a
sys.exit(exit_code) 退出程序
sys.modules 是一個(gè)dictionary,表示系統(tǒng)中所有可用的module
sys.platform 得到運(yùn)行的操作系統(tǒng)環(huán)境
sys.path 是一個(gè)list,指明所有查找module,package的路徑.
操作系統(tǒng)相關(guān)的調(diào)用和操作 import os
os.environ 一個(gè)dictionary 包含環(huán)境變量的映射關(guān)系 os.environ["HOME"] 可以得到環(huán)境變量HOME的值
os.chdir(dir) 改變當(dāng)前目錄 os.chdir('d:\\outlook') 注意windows下用到轉(zhuǎn)義
os.getcwd() 得到當(dāng)前目錄
os.getegid() 得到有效組id os.getgid() 得到組id
os.getuid() 得到用戶id os.geteuid() 得到有效用戶id
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgruops() 得到用戶組名稱列表
os.getlogin() 得到用戶登錄名稱
os.getenv 得到環(huán)境變量
os.putenv 設(shè)置環(huán)境變量
os.umask 設(shè)置umask
os.system(cmd) 利用系統(tǒng)調(diào)用,運(yùn)行cmd命令
操作舉例:
os.mkdir('/tmp/xx') os.system("echo 'hello' /tmp/xx/a.txt") os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')
用python編寫一個(gè)簡單的shell
#!/usr/bin/python
import os, sys
cmd = sys.stdin.readline()
while cmd:
os.system(cmd)
cmd = sys.stdin.readline()
用os.path編寫平臺無關(guān)的程序
os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")
os.path.split(os.getcwd()) 用于分開一個(gè)目錄名稱中的目錄部分和文件名稱部分。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路徑名稱.
os.pardir 表示當(dāng)前平臺下上一級目錄的字符 ..
os.path.getctime("/root/1.txt") 返回1.txt的ctime(創(chuàng)建時(shí)間)時(shí)間戳
os.path.exists(os.getcwd()) 判斷文件是否存在
os.path.expanduser('~/dir') 把~擴(kuò)展成用戶根目錄
os.path.expandvars('$PATH') 擴(kuò)展環(huán)境變量PATH
os.path.isfile(os.getcwd()) 判斷是否是文件名,1是0否
os.path.isdir('c:\Python26\temp') 判斷是否是目錄,1是0否
os.path.islink('/home/huaying/111.sql') 是否是符號連接 windows下不可用
os.path.ismout(os.getcwd()) 是否是文件系統(tǒng)安裝點(diǎn) windows下不可用
os.path.samefile(os.getcwd(), '/home/huaying') 看看兩個(gè)文件名是不是指的是同一個(gè)文件
os.path.walk('/home/huaying', test_fun, "a.c")
遍歷/home/huaying下所有子目錄包括本目錄,對于每個(gè)目錄都會調(diào)用函數(shù)test_fun.
例:在某個(gè)目錄中,和他所有的子目錄中查找名稱是a.c的文件或目錄。
def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是訪問的目錄名稱
if filename in names: //names是一個(gè)list,包含dirname目錄下的所有內(nèi)容
print os.path.join(dirname, filename)
os.path.walk('/home/huaying', test_fun, "a.c")
文件操作
打開文件
f = open("filename", "r") r只讀 w寫 rw讀寫 rb讀二進(jìn)制 wb寫二進(jìn)制 w+寫追加
讀寫文件
f.write("a") f.write(str) 寫一字符串 f.writeline() f.readlines() 與下read類同
f.read() 全讀出來 f.read(size) 表示從文件中讀取size個(gè)字符
f.readline() 讀一行,到文件結(jié)尾,返回空串. f.readlines() 讀取全部,返回一個(gè)list. list每個(gè)元素表示一行,包含"\n"\
f.tell() 返回當(dāng)前文件讀取位置
f.seek(off, where) 定位文件讀寫位置. off表示偏移量,正數(shù)向文件尾移動,負(fù)數(shù)表示向開頭移動。
where為0表示從開始算起,1表示從當(dāng)前位置算,2表示從結(jié)尾算.
f.flush() 刷新緩存
關(guān)閉文件
f.close()
regular expression 正則表達(dá)式 import re
簡單的regexp
p = re.compile("abc") if p.match("abc") : print "match"
上例中首先生成一個(gè)pattern(模式),如果和某個(gè)字符串匹配,就返回一個(gè)match object
除某些特殊字符metacharacter元字符,大多數(shù)字符都和自身匹配。
這些特殊字符是 。^ $ * + ? { [ ] \ | ( )
字符集合(用[]表示)
列出字符,如[abc]表示匹配a或b或c,大多數(shù)metacharacter在[]中只表示和本身匹配。例:
a = ".^$*+?{\\|()" 大多數(shù)metachar在[]中都和本身匹配,但"^[]\"不同
p = re.compile("["+a+"]")
for i in a:
if p.match(i):
print "[%s] is match" %i
else:
print "[%s] is not match" %i
在[]中包含[]本身,表示"["或者"]"匹配.用
和
表示.
^出現(xiàn)在[]的開頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒有出現(xiàn)在開頭,即于身身匹配。
-可表示范圍.[a-zA-Z]匹配任何一個(gè)英文字母。[0-9]匹配任何數(shù)字。
\在[]中的妙用。
\d [0-9]
\D [^0-9]
\s [ \t\n\r\f\v]
\S [^ \t\n\r\f\v]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\t 表示和tab匹配, 其他的都和字符串的表示法一致
\x20 表示和十六進(jìn)制ascii 0x20匹配
有了\,可以在[]中表示任何字符。注:單獨(dú)的一個(gè)"."如果沒有出現(xiàn)[]中,表示出了換行\(zhòng)n以外的匹配任何字符,類似[^\n].
regexp的重復(fù)
{m,n}表示出現(xiàn)m個(gè)以上(含m個(gè)),n個(gè)以下(含n個(gè)). 如ab{1,3}c和abc,abbc,abbbc匹配,不會與ac,abbbc匹配。
m是下界,n是上界。m省略表下界是0,n省略,表上界無限大。
*表示{,} +表示{1,} ?表示{0,1}
最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一個(gè)?.
match object的end可以得到匹配的最后一個(gè)字符的位置。
re.compile("a*").match('aaaa').end() 4 最大匹配
re.compile("a*?").match('aaaa').end() 0 最小匹配
使用原始字符串
字符串表示方法中用\\表示字符\.大量使用影響可讀性。
解決方法:在字符串前面加一個(gè)r表示raw格式。
a = r"\a" print a 結(jié)果是\a
a = r"\"a" print a 結(jié)果是\"a
使用re模塊
先用re.compile得到一個(gè)RegexObject 表示一個(gè)regexp
后用pattern的match,search的方法,得到MatchObject
再用match object得到匹配的位置,匹配的字符串等信息
RegxObject常用函數(shù):
re.compile("a").match("abab") 如果abab的開頭和re.compile("a")匹配,得到MatchObject
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").match("bbab")
None 注:從str的開頭開始匹配
re.compile("a").search("abab") 在abab中搜索第一個(gè)和re_obj匹配的部分
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").search("bbab")
_sre.SRE_Match object at 0x8184e18 和match()不同,不必從開頭匹配
re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.
返回一個(gè)tuple,其中元素是匹配的字符串.
MatchObject的常用函數(shù)
m.start() 返回起始位置,m.end()返回結(jié)束位置(不包含該位置的字符).
m.span() 返回一個(gè)tuple表示(m.start(), m.end())
m.pos(), m.endpos(), m.re(), m.string()
m.re().search(m.string(), m.pos(), m.endpos()) 會得到m本身
m.finditer()可以返回一個(gè)iterator,用來遍歷所有找到的MatchObject.
for m in re.compile("[ab]").finditer("tatbxaxb"):
print m.span()
高級regexp
| 表示聯(lián)合多個(gè)regexp. A B兩個(gè)regexp,A|B表示和A匹配或者跟B匹配.
^ 表示只匹配一行的開始行首,^只有在開頭才有此特殊意義。
$ 表示只匹配一行的結(jié)尾
\A 表示只匹配第一行字符串的開頭 ^匹配每一行的行首
\Z 表示只匹配行一行字符串的結(jié)尾 $匹配第一行的行尾
\b 只匹配詞的邊界 例:\binfo\b 只會匹配"info" 不會匹配information
\B 表示匹配非單詞邊界
示例如下:
print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示單詞邊界
_sre.SRE_Match object at 0x817aa98
print re.compile("\binfo\b").match("info ") #沒有使用raw \b表示退格符號
None
print re.compile("\binfo\b").match("\binfo\b ")
_sre.SRE_Match object at 0x8174948
分組(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b')
#!/usr/local/bin/python
import re
x = """
name: Charles
Address: BUPT
name: Ann
Address: BUPT
"""
#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)
p = re.compile(r"^name:(?P.*)\n^Address:(?P.*)\n", re.M)
for m in p.finditer(x):
print m.span()
print "here is your friends list"
print "%s, %s"%m.groups()
Compile Flag
用re.compile得到RegxObject時(shí),可以有一些flag用來調(diào)整RegxObject的詳細(xì)特征.
DOTALL, S 讓.匹配任意字符,包括換行符\n
IGNORECASE, I 忽略大小寫
LOCALES, L 讓\w \W \b \B和當(dāng)前的locale一致
MULTILINE, M 多行模式,只影響^和$(參見上例)
VERBOSE, X verbose模式
本文題目:python的常用函數(shù)和用法,python中常用的函數(shù)有哪些
本文URL:http://chinadenli.net/article16/heisdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站、云服務(wù)器、網(wǎng)站設(shè)計(jì)公司、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)