python函數和常用模塊(三),Day5

来源:http://www.cnblogs.com/wangdaming/archive/2016/09/30/5923693.html
-Advertisement-
Play Games

遞歸 反射 os模塊 sys模塊 hashlib加密模塊 正則表達式 反射 python中的反射功能是由以下四個內置函數提供:hasattr、getattr、setattr、delattr,改四個函數分別用於對對象內部執行:檢查是否含有某成員、獲取成員、設置成員、刪除成員。 os模塊 sys模塊 h ...


  • 遞歸
  • 反射
  • 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)

從起始位置開始根據模型去字元串中匹配指定內容,匹配單個

  • 正則表達式
  • 要匹配的字元串
  • 標誌位,用於控制正則表達式的匹配方式
import re

obj = re.match('\d+', '123uuasf')
if obj:
    print obj.group()

2、search(pattern, string, flags=0)

根據模型去字元串中匹配指定內容,匹配單個

import re

obj = re.search('\d+', 'u123uu888asf')
if obj:
    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。

import re

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更加強大  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • python2.x中處理中文,是一件頭疼的事情。網上寫這方面的文章,測次不齊,而且都會有點錯誤,所以在這裡打算自己總結一篇文章。 我也會在以後學習中,不斷的修改此篇博客。 這裡假設讀者已有與編碼相關的基礎知識,本文不再再次介紹,包括什麼是utf-8,什麼是unicode,它們之間有什麼關係。str與 ...
  • 最近在做一個新的項目,從RDS備份到OSS,進行數據備份以及後續的還原。這邊對阿裡雲的OSS數據上傳介面進行說明,先做下筆記先簡單介紹下OSS: ①Object 在OSS中,用戶操作的基本數據單元是Object。單個Object最大允許存儲5TB的數據。Object包含key、meta和data。其 ...
  • 字元串輸入 Python用到的輸入一般有兩種方式, 和 ,區別是,前者只能輸入數字,後者輸入的是字元串,使用如下: 字元串輸出 輸出使用 即可,後邊可加變數,也可以直接用"、'和'''來包含字元串,使用示例如下: 正常情況下均可以使用,可以使用一種包含一個字元串,字元串中可以包含另外一種(但是不可以 ...
  • 下載: 1.在spring-mvc中配置(用於100M以下的文件下載) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messa ...
  • Thread提供了stop()方法終止線程,但是該方法是強行終止,容易產生一些錯誤,已經被廢棄。 可以使用退出標誌來終止線程,在run()函數裡面設置while迴圈,把退出標誌作為while的條件,當條件為false時,run函數執行完畢,線程就自動終止了。 ...
  • 不是所有的運算符都能重載, 以下的都不行 作用域運算符號 成員訪問運算符 成員指針解引用 求類型或者對象大小的運算符 三目運算符 類型信息運算符 寫重載時註意: 不要發明運算符重載,只能對已經有的運算符重載,不能發明運算符 不能對基本類型的運算符的進行重載= 運算符重載中至少有一個類型是類類型 不能 ...
  • 判斷一個字元串是否是數值,可以用正則表達式來判斷。更簡單的方法是把字元串轉換成Float或者Double,然後捕捉NumberFormatException錯誤,如果有錯誤,就說明不是一個數值,如果沒有錯誤,就說明就是一個數值。 同樣的方法,可以判斷一個字元串是否是整數。 ...
  • 在本地開發機中進行web項目的開發,部署到生產環境進行產品發佈時,需要將web應用的文件打包成war包,War包可以放在Tomcat下的webapps或者word目錄下,隨著tomcat伺服器的啟動,它可以自動被解壓。 這樣需要遠程上傳到webapps,調試起來比較麻煩。所以在發佈生產環境之前,最好 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...