海賊王になる男です。常用模組之random,os,sys,json,subprocess
阿新 • • 發佈:2021-11-26
目錄
今日內容概要
- random模組
- os模組
- sys模組
- 序列化模組
- subprocess模組
內容詳細
random隨機數模組
import random # 隨機產生一個0-1之間的小數 print(random.random()) # 0.10115890219539025 # 隨機產生一個1-6之間的整數(擲骰子) print(random.randint(1, 6)) # 4 # 隨機產生一個1-6之間的小數 print(random.uniform(1,6)) # 2.887746768640004 # 隨機抽取一個樣板 print(random.choice(['特等獎', '一等獎', '二等獎', '謝謝惠顧', '驚喜大獎之如花抱回家'])) # 二等獎 # 隨機抽取指定樣本量 print(random.sample(['安徽省', '江蘇省', '山東省', '海南省', '廣東省', '臺灣省'], 3)) # ['山東省', '海南省', '安徽省'] # 隨機打亂容器型別中的諸多元素(洗牌) l = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'] random.shuffle(l) print(l) # [3, 2, 5, 'J', 8, 'Q', 4, 7, 'A', 10, 'K', 9, 6] # 搜狗公司筆試題 # 隨機驗證碼可以是由 數字 小寫字母 大小寫字母 任意組合 # 編寫能夠產生五位數的隨機驗證碼 '''ps:五位 每位都可以是三種情況之一''' import random def get_code(n): # 提前定義一個儲存驗證碼的變數 code = '' # 由於需要產生五位 每一位的操作都是一樣的 所以肯定需要使用迴圈 for i in range(n): # 隨機產生一個數字 random_int = str(random.randint(0, 9)) # 隨機產生一個大寫字母 random_upper = chr(random.randint(65, 90)) # chr 把數字轉按照ASCLL碼錶轉成對應的字母 # 隨機產生一個小寫字母 random_lower = chr(random.randint(97, 122)) # 隨機選取一個 temp = random.choice([random_int, random_upper, random_lower]) # 拼接到字串中 code += temp return code code1 = get_code(5) # 獲取五位驗證碼 code2 = get_code(10) # 獲取十位驗證碼 code3 = get_code(8) # 獲取八位驗證碼 print(code1, code2, code3) # sd5g7 PLc1lt32wm 7WcW301G
os模組
import os # 1.建立單級目錄(資料夾) os.mkdir('XXX老師精品課程集') os.mkdir(r'xxx視訊合集\r老師視訊作品') # 建立多層會報錯 # 2.建立多級目錄(資料夾) os.makedirs(r'xxx視訊合集\r老師視訊作品\2021選集') # 3.刪除空目錄(資料夾) os.rmdir(r'XXX老師精品課程集') os.removedirs(r'xxx視訊合集') # 報錯 必須為空資料夾才可以刪除 # 4.獲取當前檔案所在的路徑(可以巢狀 則為上一層路徑) BASE_DIR = os.path.dirname(__file__) print(BASE_DIR) BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 返回上一層 # 5.路徑拼接(******) 能夠自動識別不同作業系統分隔符問題 movie_dir = os.path.join(BASE_DIR, '老師教學視訊') # 6.列舉出指定路徑下的檔名稱(任意型別檔案) data_movie_list = os.listdir('E:/每日練習檔案/老師教學視訊') while True: for i, j in enumerate(data_movie_list): print(i + 1, j) choice = input('請選擇你想要看的檔案編號>>>:').strip() if choice.isdigit(): choice = int(choice) if choice in range(len(data_movie_list) + 1): # 獲取編號對應的檔名稱 file_name = data_movie_list[choice - 1] # 拼接檔案的完整路徑(******) file_path = os.path.join(movie_dir, file_name) # 專門用於路徑拼接 並且能夠自動識別當前作業系統的路徑分隔符 # 利用檔案操作讀寫檔案 with open(file_path, 'r', encoding='utf8') as f: print(f.read()) # 7.刪除一個檔案 os.remove('a.txt') # 8.修改檔名稱 os.rename('原始檔名','新檔名') # 9.獲取當前工作路徑 print(os.getcwd()) # 10.切換路徑 os.chdir('D:/') with open(r'a.txt','wb') as f: # 可以在檔案操作時切換路徑 pass # 11.判斷當前路徑是否存在 print(os.path.exists('a.txt')) print(os.path.exists('老師教學視訊')) print(os.path.exists('...')) # 12.判斷當前路徑是否是檔案 print(os.path.isfile('老師教學視訊')) print(os.path.isfile('...')) # 13.判斷當前路徑是否是資料夾 print(os.path.isdir('01.py')) # False print(os.path.isdir('老師教學視訊')) # True # 14.獲取檔案大小(位元組數) print(os.path.getsize(r'001.py'))
sys模組
import sys # 主要與python直譯器打交道 print(sys.path) # 獲取系統變數 print(sys.version) # 當前直譯器版本 print(sys.platform) # 當前計算機系統平臺版本 print(sys.argv) # 獲取當前執行檔案的絕對路徑 try: username = sys.argv[1] password = sys.argv[2] if username == 'jason' and password == '123': print('正常執行檔案內容') else: print('使用者名稱或密碼錯誤') except Exception: print('請輸入使用者名稱和密碼')
序列化模組(json)
import json
# json格式資料 用於跨語言傳輸
d = {'username': 'jason', 'pwd': 123}
# 1.將python其他資料轉換成json格式字串(序列化)
res = json.dumps(d) # python中的字典轉換成json格式字串
print(res, type(res)) # {"username": "jason", "pwd": 123} <class 'str'>
# 2.將json格式字串轉成當前語言對應的某個資料型別(反序列化)
res1 = json.loads(res) # 轉回python語言中的字典型別
print(res1, type(res1)) # {'username': 'jason', 'pwd': 123} <class 'dict'>
bytes_data = b'{"username": "jason", "pwd": 123}'
bytes_str = bytes_data.decode('utf8') # 先把其他語言的資料解碼成json格式字串
bytes_dict = json.loads(bytes_str) # json格式字串轉成python語言的字典型別
print(bytes_dict, type(bytes_dict)) # {'username': 'jason', 'pwd': 123} <class 'dict'>
"""
簡單理解:
序列化就是將其他資料型別轉成字串的過程
json.dumps()
反序列化就是將字串型別轉成其他資料型別
json.loads()
"""
d = {'username': 'jason', 'pwd': 123}
# 將字典d寫入檔案(常規寫法 但錯誤)
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write(str(d)) # 寫入文字檔案只能是字串型別
# 將字典d取出來
with open(r'a.txt', 'r', encoding='utf8') as f:
data = f.read()
print(dict(data)) # 取出的資料為字串型別 無法轉回字典讀取 直接報錯
# 將字典d寫入檔案(通過json模組轉換實現)
with open(r'a.txt', 'w', encoding='utf8') as f:
res = json.dumps(d) # 將字典序列化成json格式字串再寫入
f.write(res)
# 將字典d取出來
with open(r'a.txt', 'r', encoding='utf8') as f:
data = f.read()
res1 = json.loads(data) # 將json格式字串轉成當前語言的字典資料型別(反序列化)
print(res1, type(res1)) # {'username': 'jason', 'pwd': 123} <class 'dict'>
# dump load 使用達到同樣效果
d1 = {'username': 'tony', 'pwd': 123, 'hobby': [11, 22, 33]}
with open(r'a.txt', 'w', encoding='utf8') as f:
json.dump(d1, f)
with open(r'a.txt', 'r', encoding='utf8') as f:
res = json.load(f)
print(res, type(res))
# 文字內容含有漢字 需要指定直譯器不操作ASCLL碼轉換 才可以正常顯示漢字
d1 = {'username': 'tony好帥哦 我好喜歡', 'pwd': 123,'hobby':[11,22,33]}
print(json.dumps(d1,ensure_ascii=False)) # {"username": "tony好帥哦 我好喜歡", "pwd": 123, "hobby": [11, 22, 33]}
"""
不是所有的資料型別都支援序列化
json.JSONEncoder 檢視支援的資料型別
"""
subprocess模組
import subprocess
"""
1.可以基於網路連線上一臺計算機(socket模組)
2.讓連線上的計算機執行我們要求執行的命令
3.將命令的結果返回
"""
res = subprocess.Popen('tasklist',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print('stdout', res.stdout.read().decode('gbk')) # 獲取正確命令執行之後的結果
print('stderr', res.stderr.read().decode('gbk')) # 獲取錯誤命令執行之後的結果
"""
windows電腦在中國的內部編碼預設為GBK
"""