python模塊知識二 random -- 隨機模塊、序列化 、os模塊、sys -- 系統模塊

4.random — 隨機模塊

  1. a-z:97 ~ 122 A-Z :65 ~ 90
import random
#浮點數
print(random.random())#0~1,不可指定
print(random.uniform(1,10))#1~10#須指定

#整數
print(random.randint(1,10))[1~10]整數,閉區間
print(random.randrange(1,5,2))#(起始,終止,步長)
list1 = [1,2,3,4,5]
print(random.choice(list1)) #隨機選擇一個元素
print(random.choices(list1,k=2))#選擇兩個元素,會有重複,k可以超範圍
print(random.sample(list1,k=2))#選擇兩個元素,k不可以超範圍。不會有重複,除非只有兩個[1,1]

#打亂順序
list1 = [12,3,4,5,6,7,8,9]
random.shuffle(list1)
print(list1)

5.序列化

1.json 模塊

​ 兩組4個方法:

  1. ​ dumps() :將對象轉(序列化)成字符串

​ loads() :將字符串轉換(反序列化)成對象

import json
#列表
list1 = [1,22,3,3,45]
str1 = json.dumps(list1)#序列化
print(str1,type(str1))
list2 = json.loads(str1)#反序列化
print(list2,type(list2))

#字典
dict1 = {"k1":"無聊","k2":2}
str2 = json.dumps(dict1)#漢字會變成ASCII碼,
str3 = json.dumps(dict1,ensure_ascii=False)#將ASCII轉碼關閉
print(str2,type(str2))
dict2 = json.loads(str2)
print(dict2,type(dict2))
  1. ​ dump() :將對象轉換(序列化)成字符串,寫入文件

    ​ ldad():將文件中的字符串轉換(反序列化)成對象

import json
list1 = [1,22,3,3,45]
f = open('info','a')
json.dump(list1,f)#每次只能在同一行寫入
#解決:寫入多行
f.writelines(json.dumps(list1) + '\n')
f.close()

f1 = open('info','r')
l = json.load(f1)#只能讀取一行,多行或一行有多個數據會報錯
#解決:讀取多行
for i in f1:
    l = json.loads(i)
    print(l)
print(l,f1)

2.pickle 序列化

​ — 近乎可將python所有對象進行轉換(python自帶,只有python可以用)

推薦使用json:jaon是各種語言通用的,pickle是python私有的

兩組4個方法:

​ 1.

​ dumps:轉成類字節

​ loads:轉回原對象

import pickle
#轉列表
list1 = [1,2,3,4,6]
str1 = pickle.dumps(list1)#轉換成類似字節
print(str1,type(str1))
list2 = pickle.loads(str1)
print(list2,type(list2))

#轉字典
dict1 = {'k1':'v1'}
str1 = pickle.dumps(dict1)
print(str1)
print(pickle.loads(str1))

#轉函數名
def func():
    print(111)
fun = pickle.dumps(func)
print(fun)
pickle.loads(fun)()

​ dump::轉成類字節寫入文件

​ load:讀取文件並還原成原對象

import pickle
dic = {'user':'你去'}
pickle.dump(dic,open("info",'wb'))
print(pickle.load(open("info",'rb')))

#寫入多行,讀取多行
f = open("info",'wb')
s = "\n".encode("utf-8")
f.write(pickle.dumps(dic) + s)
f.close()
f1 = open("info",'rb')
for i in f1:
    print(pickle.loads(i))

6.os模塊 — 與操作系統交互的接口

(程序員通過python向操作系統發送指令)

共四組:

  1. 工作目錄
import os
print(os.getcwd())#獲取當前工作目錄 ***
os.chdir("D:\\")#路徑切換***
print(os.curdir)#當前 .
print(os.pardir)#父級 ..
  1. 文件夾:***
import os
os.mkdir('tt')#創建一個文件夾,不能是跨級創建
os.rmdir('tt')#刪除一個空的文件夾
os.makedirs("tt/ss/dd")#遞歸創建文件夾
os.removedirs("tt/ss/dd")#遞歸刪除文件夾

print(os.listdir(r"E:\python\oldboy\py\190726"))#返回目錄下文件
  1. 文件
import os
os.rename()#修改文件名***
os.remove("info")#刪除文件,不能撤銷***
print(os.path.getatime(r"E:\python\oldboy\py\190726\01.py"))#最後修改的時間
print(os.path.getctime(r"E:\python\oldboy\py\190726\01.py"))#最後的訪問時間
print(os.path.getmtime(r"E:\python\oldboy\py\190726\01.py"))#最後的訪問時間
print(os.path.getsize(r"E:\python\oldboy\py\190726\01.py"))#獲取當前文件的大小,不用來判斷文件夾。***
#要寫一個函數實現,先判斷是否為文件:

#os.listdir() 方法用於返回指定的文件夾包含的文件或文件夾的名字的列表
import os
for i in os.listdir(“hahaha”):
    if os.path.isfile(i):
        print(os.path.getsize(“hahaha”+os.sep+i))
  1. 路徑
import os
print(os.path.abspath(r"01.py"))#通過相對路徑獲取絕度路徑 ***
print(os.path.split(os.path.abspath(r"01.py")))#將絕對路徑按照最後一個'\'切割(路徑,文件名)***

print(os.path.dirname(r"E:\python\oldboy\py\190726\01.py"))#通過絕對路徑獲取路徑 ***
print(os.path.basename(r"E:\python\oldboy\py\190726\01.py"))#通過路徑獲獲取最後輸入的最後一級文件名 **

print(os.path.exists(r"E:\python\oldboy\py\190726\01.py"))#判斷這個路徑是否存在 ***
print(os.path.isdir(r"E:\python\oldboy\py\190726\01.py"))#判斷是不是存在的目錄 ***
print(os.path.isfile(r"01.py"))#判斷是不是存在的文件 ***
print(os.path.isabs(r"E:\python\oldboy\py\190726\01.py"))#判斷是不是絕對路徑

print(os.path.join("D:\\","tt","dd"))#路徑拼接 ***

7.sys — 系統模塊,與python解釋器交互的接口

import sys
sys.argv#命令行傳參
print(sys.argv)

sys.exit()#退出程序,可以修改參數,0為正常退出,1為出錯

print(sys.version)#獲取當前解釋器版本

print(sys.path())#添加自定義模塊查找路徑

print(sys.platform)#區分操作系統,進行相關邏輯操作

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *