1、os 所有和操作系統相關的內容都在os模塊,一般用來操作文件系統 import os os.makedirs('dirname1/dirname2') # 可生成多層遞歸目錄 os.removedirs('dirname1') # 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪 除,依 ...
1、os 所有和操作系統相關的內容都在os模塊,一般用來操作文件系統
import os os.makedirs('dirname1/dirname2') # 可生成多層遞歸目錄 os.removedirs('dirname1') # 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪 除,依此類推 os.mkdir('dirname') # 生成單級目錄;相當於shell中mkdir dirname os.rmdir('dirname') # 刪除單級空目錄,若⽬目錄不不為空則無法刪除,報錯;相當於shell中 rmdir dirname os.listdir('dirname') # 列列出指定目錄下的所有文件和子目錄,包括隱藏⽂文件,並以列列表⽅方式 列印 os.remove() # 刪除一個文件 os.rename("oldname","newname") # 重命名文件/目錄 os.stat('path/filename') # 獲取文件/目錄信息 os.system("bash command") # 運行行shell命令,直接顯示 os.popen("bash command).read()") # 運行行shell命令,獲取執行行結果 os.getcwd() # 獲取當前工作目錄,即當前python腳本工作的目錄路路徑 os.chdir("dirname") # 改變當前腳本工作目錄;相當於shell下cd # os.path
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所指向的文件或者⽬目錄的最後修改時間 os.path.getsize(path) # 返回path的大小 # 特殊屬性: os.sep 輸出操作系統特定的路路徑分隔符,win下為"\\",Linux下為"/" os.linesep # 輸出當前平臺使用的行行終止符,win下為"\r\n",Linux下為"\n" os.pathsep # 輸出用於分割文件路徑的字元串 win下為;,Linux下為: os.name # 輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
import os os.makedirs("a/b/c") # 可以一次性創建多個目錄 os.makedirs("a/d/f") os.mkdir('a/b') # 上層文件夾必須存在 os.removedirs('a/b/c') # 可以幫我們刪除當前這個目錄級中所有空文件夾 os.rmdir('a/d/f') # 指定文件夾刪除 os.system('dir') # 運行shell命令,獲取執行結果(中文有可能會亂碼,解決辦法,運行下一個) print(os.popen('dir').read()) # 執行shell腳本後者cmd命令 print(os.getcwd()) # 當前程式運行的文件夾 os.chdir('a') # 改變工作目錄 print(os.getcwd())
os.stat() 屬性解讀:
stat 結構: st_mode: inode 保護模式 st_ino: inode 節點號。 st_dev: inode 駐留的設備。 st_nlink: inode 的鏈接數。 st_uid: 所有者的用戶ID。 st_gid: 所有者的組ID。 st_size: 普通文件以位元組為單位的大小;包含等待某些特殊文件的數據。 st_atime: 上次訪問的時間。 st_mtime: 最後一次修改的時間。 st_ctime: 由操作系統報告的"ctime"。在某些系統上(如Unix)是最新的元數據更更改的時間,在 其它系統上(如Windows)是創建時間(詳細信息參見平臺的文檔)。2、sys 主要針對的是我們的python解釋器 sys.path 模塊的查找路徑
import sys # print(sys.platform) print(sys.path) # 找模塊的, 必須要記住,模塊的搜索路徑 sys.path.append("F:\\python_workspace_hxt\\day21 繼承") import master master.eat()
import sys sys.argv # 命令行參數List,第一個元素是程式本身路徑 sys.exit(n) # 退出程式,正常退出時exit(0),錯誤退出sys.exit(1) sys.version # 獲取Python解釋程式的版本信息 sys.path # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 sys.platform # 返回操作系統平臺名稱3、序列化 在我們存儲數據或者網路傳數數據的時候。需要對我們的對象進行處理。把對象處理成方便存儲和傳數的數據格式。這個過程叫序列化。不同的序列化,結果也不相同,但是目的是一樣的,都是為了存儲和傳輸 在python中存在三種序列化的方案 1、pickle 可以講我們python種的任意數據類型轉化成bytes並寫入到文件中,同樣也可以把文件中寫好的bytes轉化回我們python的數據,此過程叫反序列化。 2、shelve 簡單另類的一種序列化方案,有點類似redis,可以作為一種小型的資料庫來使用 3、json 講python中常見的字典,列表裝化成字元串,是目前前後端數據交互使用頻率最高的一種數據格式。 4、pickle 把一個對象進行序列化操作 1、dumps() 把對象序列化成位元組 2、loads() 把位元組反序列化成對象
import pickle class Elephant: def __init__(self,name,weight,height): self.name = name self.weight = weight self.height = height def play(self): print(f"{self.name}大象特別喜歡吃香蕉") e = Elephant('懶懶','1023T','176') # # e.play() # 序列化 ba = pickle.dumps(e) # 把對象進行序列化 print(ba) bs = b'\x80\x03c__main__\nElephant\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x06\x00\x00\x00\xe6\x87\x92\xe6\x87\x92q\x04X\x06\x00\x00\x00weightq\x05X\x05\x00\x00\x001023Tq\x06X\x06\x00\x00\x00heightq\x07X\x03\x00\x00\x00176q\x08ub.' # 反序列化 dx = pickle.loads(bs) # 反序列化,得到的是大象 dx.play()3、dump() 把對象序列化寫入文件 # 寫入到文件的是bytes 4、load() 把文件中的內容反序列化成對象
e1 = Elephant('懶懶','1023T','176') e2 = Elephant('舟舟','789T','189') f = open('大象',mode='wb') # 這也是序列化 pickle.dump(e1,f) # 沒有s的這個方法是把對象打散寫入到文件,序列化的內容不是給人看的,是給機器看的 pickle.dump(e2,f) f = open('大象',mode='rb') while 1: try: obj = pickle.load(f) obj.play() except Exception: break ------2---------- e1 = Elephant('懶懶','1023T','176') e2 = Elephant('舟舟','789T','189') lst = [e1,e2] pickle.dump(lst,open('大象',mode='wb')) # 讀 lst = pickle.load(open('大象',mode='rb')) for dx in lst: dx.play()6、json(javascript object notation) 可以認為是python中的字典,json是我們前後端交互的樞紐,有一點不一樣 python :True ,False,None json:true,false,null 1、dumps() 把對象序列化成json 2、loads() 把json反序列化成對象 3、dump()把對象序列化寫入文件 4、load() 把文件中的內容反序列化成對象
import json dic = {'baby':None,'hb':False,'hut':'hutong'} s = json.dumps(dic,ensure_ascii=False) # json 處理中文的問題 print(s) # {"baby": null, "hb": false, "hut": "hutong"} # 讀 d = json.loads('{"baby": null, "hb": false, "hut": "hutong"}') print(d['baby'])
f = open('baby.json',mode='w',encoding='utf-8') json.dump({'baby':None,'hb':False,'hut':'hutong'},f,ensure_ascii=False) # 讀 f = open('baby.json',mode='r',encoding='utf-8') obj = json.load(f) print(obj)