python 常用模块函数_python函数和常用模块(三),Day5
遞歸
反射
os模塊
sys模塊
hashlib加密模塊
正則表達式
反射
python中的反射功能是由以下四個內置函數提供:hasattr、getattr、setattr、delattr,改四個函數分別用于對對象內部執行:檢查是否含有某成員、獲取成員、設置成員、刪除成員。
class Foo(object):
def __init__(self):
self.name = 'wupeiqi'
def func(self):
return 'func'
obj = Foo()
# #### 檢查是否含有成員 ####
hasattr(obj, 'name')
hasattr(obj, 'func')
# #### 獲取成員 ####
getattr(obj, 'name')
getattr(obj, 'func')
# #### 設置成員 ####
setattr(obj, 'age', 18)
setattr(obj, 'show', lambda num: num + 1)
# #### 刪除成員 ####
delattr(obj, 'name')
delattr(obj, 'func')
os模塊
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') # 獲取文件/目錄信息
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所指向的文件或者目錄的最后修改時間
sys模塊
sys.argv # 命令行參數List,第一個元素是程序本身路徑
sys.exit(n) # 退出程序,正常退出時exit(0)
sys.version # 獲取Python程序的版本信息
sys.maxint # 最大的Int值
sys.path # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform # 返回操作系統平臺的名稱
sys.stdin # 輸入相關
sys.stdout # 輸出相關
sys.stderror # 錯誤相關
hashlib加密模塊
用于加密相關的操作,代替了md5模塊和sha模塊,主要提供?SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
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()
以上加密算法雖然依然非常厲害,但時候存在缺陷,即:通過撞庫可以反解。所以,有必要對加密算法中添加自定義key再來做加密。
import hashlib
# ######## md5 ########
hash = hashlib.md5('898oaFs09f')
hash.update('admin')
print hash.hexdigest()
還不夠吊?python 還有一個 hmac 模塊,它內部對我們創建 key 和 內容 再進行處理然后再加密
import hmac
h = hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()
不能再牛逼了!!!
import hashlib
obj = hashlib.md5()
obj.update(bytes('admin', encoding='utf-8'))
result = obj.hexdigest()
print(result)
# 加key密鑰
obj = hashlib.md5(bytes('xxxxxxxx', encoding='utf-8'))
obj.update(bytes('admin', encoding='utf-8'))
result = obj.hexdigest()
print(result)
正則表達式
re模塊用于對python的正則表達式的操作。
字符:
. 匹配除換行符以外的任意字符
\w匹配字母或數字或下劃線或漢字
\s匹配任意的空白符
\d匹配數字
\b匹配單詞的開始或結束
^匹配字符串的開始
$匹配字符串的結束
次數:
* 重復零次或更多次
+重復一次或更多次
?重復零次或一次
{n}重復n次
{n,}重復n次或更多次
{n,m}重復n到m次
IP:^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手機號:^1[3|4|5|8][0-9]\d{8}$
1、match(pattern, string, flags=0)
從起始位置開始根據模型去字符串中匹配指定內容,匹配單個
正則表達式
要匹配的字符串
標志位,用于控制正則表達式的匹配方式
importre
obj= re.match('\d+', '123uuasf')ifobj:print obj.group()
2、search(pattern, string, flags=0)
根據模型去字符串中匹配指定內容,匹配單個
importre
obj= re.search('\d+', 'u123uu888asf')ifobj:print obj.group()
3、group和groups
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()
4、findall(pattern, string, flags=0)
上述兩中方式均用于匹配單值,即:只能匹配字符串中的一個,如果想要匹配到字符串中所有符合條件的元素,則需要使用?findall。
importre
obj= re.findall('\d+', 'fa123uu888asf')print obj
5、sub(pattern, repl, string, count=0, flags=0)
用于替換匹配的字符串
content = "123abc456"new_content= re.sub('\d+', 'sb', content)#new_content = re.sub('\d+', 'sb', content, 1)
print new_content
相比于str.replace功能更加強大
6、split(pattern, string, maxsplit=0, flags=0)
根據指定匹配進行分組
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)#new_content = re.split('\*', content, 1)
print new_content
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)#new_content = re.split('\*', content, 1)
print new_content
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'inpp= re.sub('\s*','',inpp)
new_content= re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)print new_content
相比于str.split更加強大
總結
以上是生活随笔為你收集整理的python 常用模块函数_python函数和常用模块(三),Day5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 换服务器_更换MYSQL后数
- 下一篇: java annotation list