1. 程式人生 > >Python反射、模組中的變數os、sys、__file__、加密模組等

Python反射、模組中的變數os、sys、__file__、加密模組等

1、反射

輸入請求,呼叫請求的呼叫函式,使字串“func”變為func()。利用字串的形式去物件(預設)中操作成員(尋找、檢查、刪除、設定)。

commons:

#_*_coding:utf-8_*_
__author__ = 'Alex_XT'

def login():
    print("login...")

def home():
    print("home...")

def logout():
    print("logout....")

main:

#_*_coding:utf-8_*_
__author__ = 'Alex_XT'
import commons

def
run():
inp=input("請輸入命令:") # 判斷是否存在該成員 if hasattr(commons,inp): func=getattr(commons,inp) func() else: print("404") if __name__ == '__main__': run()

2、利用字串匯入模組

#_*_coding:utf-8_*_
__author__ = 'Alex_XT'
def run():
    inp=input("請輸入模組與命令:樣例》》commons/login"
) m,f=inp.split('/') obj=__import__(m) # 判斷是否存在該成員 if hasattr(obj,f): func=getattr(obj,f) func() else: print("404") if __name__ == '__main__': run()

如果不在同一資料夾下時,調用出錯,如將commons放到lib裡,改進為:

obj=__import__("lib."+m,fromlist=True)

3、模組中的_ doc_

對應開頭的定義:

"""
__author__ = 'Alex_XT'

"""

print(__doc__)

列印輸出檔案開頭的解釋

4、模組_ file_和os模組

列印當前執行檔案所在的路徑:print(__file__)
獲取當前執行檔案所在的路徑,獲得相對路徑。

import os

print(__file__)#command執行只拿到檔名
print(os.path.abspath(__file__))#拿到絕對路徑的完整路徑
print(os.path.dirname(os.path.abspath(__file__)))#拿到絕對路徑的上級路徑
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#拿到絕對路徑的上上級路徑

路徑的拼接:os.path.join()
用於提供系統級別的操作:

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所指向的檔案或者目錄的最後修改時間

5、新增路徑sys模組

檔案:

import os
import sys
print(__file__)#command執行只拿到檔名
print(os.path.abspath(__file__))#拿到絕對路徑的完整路徑
print(os.path.dirname(os.path.abspath(__file__)))#拿到絕對路徑的上級路徑
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))#拿到絕對路徑的上上級路徑

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

進度條:

# _*_coding:utf-8_*_
"""
__author__ = 'Alex_XT'

"""
import sys
import time
def viewBar(num,total):
    rate=num/total
    int_number=int(rate*100)
    sys.stdout.write("\r%s>%d%%"%("#"*num,int_number))#\r表示重新回到當前行的位置
    sys.stdout.flush()

if __name__ == '__main__':
    for i in range(0,11):
        time.sleep(0.2)
        viewBar(i,10)

結果:##########>100%

6、_ package_模組

所在的包檔名

from TEST.lib import commons

print(__package__)
print(commons.__package__)

7、_ name_模組

只有當執行當前檔案時,才是main函式,當其被匯入時,就不是main函數了。

if __name__ == '__main__':
    run()

8、加密模組

hashlib:
用於加密相關的操作,代替了md5模組和sha模組,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法
以上加密演算法雖然依然非常厲害,但時候存在缺陷,即:通過撞庫可以反解。所以,有必要對加密演算法中新增自定義key再來做加密。雙重加密:

import hashlib

obj=hashlib.md5(bytes('key',encoding='utf-8'))
obj.update(bytes("12345",encoding='utf-8'))
ret=obj.hexdigest()
print(ret)
######## sha1 ########

hash = hashlib.sha1()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())

# ######## sha256 ########

hash = hashlib.sha256()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())


# ######## sha384 ########

hash = hashlib.sha384()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())

# ######## sha512 ########

hash = hashlib.sha512()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())

參考