Python模塊

sys

從Python3.2版本開始,sys模塊移除了sys.setdefaultencoding方法,由於該setfaultencoding方法是在解決Python2.x中的字符編碼的問題,而Python3.x中使用utf8後,就再也不須要使用該方法
sys

hashlib

import hashlib
import os
import time

print(hashlib.md5('abc'.encode('UTF-8')).hexdigest())
print(hashlib.sha1('abc'.encode('UTF-8')).hexdigest())
print(hashlib.sha256('abc'.encode('UTF-8')).hexdigest())
print(hashlib.sha512('abc'.encode('UTF-8')).hexdigest())
'''
900150983cd24fb0d6963f7d28e17f72
a9993e364706816aba3e25717850c26c9cd0d89d
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
'''

random_str = lambda: hashlib.sha1(bytes("%s%s" % (os.urandom(16), time.time()), encoding='utf8')).hexdigest()

print(random_str())  # 29c7f2f6ecaabb603db82854c7d58ca258d9aff9


def random_str1():
    byt = bytes('%s%s' % (os.urandom(16), time.time()), encoding='utf8')
    sh = hashlib.sha1(byt)
    return sh.hexdigest()


print(random_str1())  # 3b142a3e7c804ee5dc67d802eda1d43a44399c31


# md5返回的字符串

def md5str():
    md = hashlib.md5(bytes('%s%s' % (os.urandom(16), time.time()), encoding='utf8'))

    return md.hexdigest()


print(md5str())  # d40ae2d0fa337673aee598f82bb3180e
View Code

math模塊

'''
Python3.x中,math.floor(x)返回x的下舍整數
Python2.x中,返回的是float類型
'''

# floor示例
import math

print(math.floor(32.5))  # 32
print(type(math.floor(32.3)))  # python3默認爲int類型  <class 'int'>
print(int(math.floor(32.9)))  # 32
print(float(math.floor(32.9)))  # 32.0
print(math.floor(-32.93))  # -33
print(math.floor(math.pi))  # 3
print(math.pi)  # 3.141592653589793
View Code

keyword

# keyword模塊能夠判斷一個字符串是否爲Python內的關鍵字
keyword.iskeyword(s)
# 若是s是Python中的關鍵字,若是是則返回True,不然返回False
keyword.kwlist
# 以列表的形式返回Python中的全部關鍵字

# see also: https://docs.python.org/3.7/library/keyword.html

for example:
'''
>>> import keyword
>>> keyword.iskeyword("and")
True
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
'''
keyword

platform

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> platform.machine()  # 返回機器類型,不肯定則返回空字符串
'AMD64'
>>> platform.node()        # 返回機器網絡名稱,不肯定則返回空字符串
'DESKTOP-D7UG7RC'
>>> platform.platform()    # 返回機器系統平臺信息
'Windows-10-10.0.14393-SP0'
>>> platform.processor()    # 返回機器的處理器信息
'Intel64 Family 6 Model 60 Stepping 3, GenuineIntel'

see also:https://docs.python.org/3.7/library/platform.html
platform:訪問系統平臺的底層信息

getpass

在python3.6.2解釋器,在pycharm的run裏運行依然顯示,可是在cmd和tterminal下沒有問題html

# import msvcrt
# def pwd_input():
#     chars = []
#     while True:
#         try:
#             newChar = msvcrt.getch().decode(encoding="utf-8")
#         except:
#             return input("你極可能不是在cmd命令行下運行,密碼輸入將不能隱藏:")
#         if newChar in '\r\n': # 若是是換行,則輸入結束
#              break
#         elif newChar == '\b': # 若是是退格,則刪除密碼末尾一位而且刪除一個星號
#              if chars:
#                  del chars[-1]
#                  msvcrt.putch('\b'.encode(encoding='utf-8')) # 光標回退一格
#                  msvcrt.putch( ' '.encode(encoding='utf-8')) # 輸出一個空格覆蓋原來的星號
#                  msvcrt.putch('\b'.encode(encoding='utf-8')) # 光標回退一格準備接受新的輸入
#         else:
#             chars.append(newChar)
#             msvcrt.putch('*'.encode(encoding='utf-8')) # 顯示爲星號
#     return (''.join(chars) )
#
# print("請輸入密碼:")
# pwd = pwd_input()
# print("\n密碼是:{0}".format(pwd))
# input("按回車鍵退出")



import getpass

user = getpass.getuser()
print('user:',user)
pwd = getpass.getpass('pwd:')
print(pwd)

示例代碼
getpass 示例

shelve

shelve模塊是一個簡單的以字典形式存儲的輕量級的持久化Python對象的模塊。node

'''
shelve能夠用來持久化任意的Python的對象,pickle能處理的,shelve都能持久化,通常咱們經過字典的形式來操做shelve對象
shelve對象支持字典支持的全部方法。
f = shelve.open(filename)    # 經過open方法打開一個文件,並拿到文件對象f
f['a'] = "Python's obj"        # 以字典的方式將Python中的任意對象持久化

a = f['a']
a = 'new str'
f['a'] = a

f.close()       # 最後要顯示的調用close方法,保存並關閉f對象
# 若是以爲每次f.close()麻煩,請用with負責管理:
with shelve.open(filename) as f:
    f['auth'] = {'name': 'wang', 'age': 18}

# 參數
shelve.open(filename, flag='c', protocol=None, writeback=False)
filename: 打開的文件
flag: 'c'爲打開數據庫進行讀寫,若是不存在則建立它,詳情參閱dbm模塊的關於flag的參數 https://docs.python.org/3/library/dbm.html#dbm.open
protocol: 遵循pickle的協議版本,這裏可選爲0、一、2
ps:目前pickle的protocol參數默認爲3,Python3中的新協議,see also https://docs.python.org/3/library/pickle.html#pickle.DEFAULT_PROTOCOL
writeback: 若是writeback參數爲True,則對象將保存全部訪問條目的緩存,並在同步和關閉時將它們寫回dict。 這容許對可變條目進行天然操做,
但能夠消耗更多內存並使同步和關閉須要很長時間。
ps:shelve對象不支持多應用同時寫入,而且對於該對象不知道那些字典的內容被修改,
因此須要制定writeback,在最後 保存的時候,將所有的字典寫回文件,這樣不免佔用了大量的時間和內存消耗
'''

import shelve

f = shelve.open('a.txt')


''' shelve: add '''

class A:
    x = 'AD鈣奶'
    def test(self):
        y = 2
obj = A()
f['obj'] = obj
f['auth'] = {'name': 'wang', 'age': 18}
f['list'] = [1, 2, 3, 4]
f['tuple'] = ('a', 'b')
f.close()

''' shelve: select '''
f1 = shelve.open('a.txt')   # open file
print(f1['obj'].x)   # AD鈣奶
print(f1['auth']['name'])  # wang
print(f1['list'])   # [1, 2, 3, 4]
print(f1['tuple'])  # ('a', 'b')
f1.close()

''' shelve: update '''
f2 = shelve.open('a.txt')
obj1 = f2['obj']
obj1.x = 'wahaha'
f2['obj'] = obj1
print(f2['obj'].x)  # wahaha
auth = f2['auth']
auth['age'] = 16
f2['auth'] = auth
print(f2['auth'])   # {'name': 'wang', 'age': 16}
f2.close()
''' shelve: delete '''

# with shelve.open('a.txt') as f3:
    # del f3['tuple']
with shelve.open('a.txt') as f4:
    for i in f4:
        print(i)
'''
obj
auth
list
'''
View Code

see also: shelvepython

 


see also: http://www.paramiko.org/
Paramiko

from retry import retry
@retry(tries=5, delay=1)
def foo():
    print('自動重複執行')
    raise 
foo()
retry

 1 import shutil
 2 '''
 3 shutil模塊對文件和文件集合提供了許多高級操做。特別是,提供了支持文件複製和刪除的功能
 4 '''
 5 
 6 # shutil.copy(src, dst)   # 拷貝文件
 7 # shutil.move(src, dst)  # 移動目錄或者文件
 8 
 9 # shutil.rmtree(path)   # 遞歸刪除目錄,沒法直接刪除文件
10 # shutil.make_archive(base_name, format('zip'))   # 將目錄或者文件以指定格式壓縮
11 # shutil.unpack_archive(filename, extract_dir)  # 解壓縮
12 
13 # see also: https://docs.python.org/3/library/shutil.html
shutil
 1 '''
 2 tqdm在阿拉伯語意爲"進步"的意思,是一個快速、擴展性強的進度條工具庫,只須要封裝任意的tqdm(iterable)便可
 3 tqdm有較小的開銷,智能預測剩餘時間和沒必要要的迭代顯示。
 4 tqdm使用與任何平臺:Linux、windows、Mac、FreeBSD、NetBSD、Solaris/SunOS,能夠是任何控制檯或GUI,而且較好的支持Ipython和Jupyter
 5 tqdm須要任何依賴,只要經過下面的下載就能夠了
 6 pip install tqdm
 7 '''
 8 
 9 import tqdm
10 import time
11 
12 
13 # 基本用法: tqdm.tqdm
14 for i in tqdm.tqdm(range(1000)):
15     time.sleep(0.01)
16 
17 # 能夠這樣:tqdm.trange
18 for i in tqdm.trange(1000):
19     time.sleep(0.01)
20 
21 # 使用with語句對tqdm進行手動控制
22 with tqdm.tqdm(total=1000) as f:
23     for i in range(1000):
24         time.sleep(0.01)
25         f.update(10)
26 
27 # 應用於文件傳輸中,最後不要忘記close
28 import os
29 send_size = 0
30 file_name = 'a.mp4'
31 file_size = os.stat(file_name).st_size
32 t = tqdm.tqdm(total=file_size, desc='下載進度')
33 with open(file_name, 'rb') as f:
34     while send_size < file_size:
35         if file_size - send_size < 1024:
36             total_data = f.read(file_size - send_size)
37         else:
38             total_data = f.read(1024)
39         send_size += len(total_data)
40         t.update(len(total_data))
41 t.close()
42 
43 
44 # see also: https://tqdm.github.io/
45 # https://github.com/tqdm/tqdm#documentation
tqdm:進度條
'''
ansible在windows下經過普通的pip方式很難(我沒有安裝成功)安裝成功,但在Linux下經過
pip install ansible
就能夠很簡單的安裝成功
'''
接下來就說說windows下如何安裝。
1. 從pypi官網下載你想要的版本的tar包,地址是:https://pypi.org/project/ansible/
2. 當下載到本地以後,解壓到Python安裝目錄的Script目錄內,好比個人Python解釋器安裝在C盤的Python目錄內,那麼就把tar包解壓到【C:\python36\Scripts】這個目錄內
3. 以管理員權限打開cmd,將目錄切換到C:\python36\Scripts下的解壓後的ansible目錄內,好比我安裝的是ansible的2.7.4版本,那麼, 此時cmd目錄就應該在【C:\python36\Scripts\ansible-2.7.4】這個目錄下,而後cmd中輸入
    python setup.py install
而後通過一番安裝,其中夾雜兩個語法錯誤以後,就磕磕絆絆的安裝成功了。
4. 打開解釋器
輸入
    import ansible
不報錯就說明安裝成功了。

see also: https://blog.csdn.net/weixin_42356309/article/details/83411437
ansible
'''
pip install tabulate
'''
import tabulate

table = [('vip%s' % i, 20 * i, 50000 * 10 * i) for i in range(1, 11)]
headers = ('vip_level', 'price', 'storage')

for fmt in tabulate._table_formats.keys():
        print(''.center(20, '*'), fmt, ''.center(20, '*'))
        print(tabulate.tabulate(table, headers=headers, tablefmt=fmt))


# a = ''.join(tabulate.tabulate(table, headers=headers, tablefmt='psql'))
# print(a)
tabulate生成表單數據

 

 


see also:三方庫整理git

that's allgithub

相關文章
相關標籤/搜索