Python os、sys、pickle、json等模塊

来源:https://www.cnblogs.com/a2534786642/archive/2018/12/28/10193023.html
-Advertisement-
Play Games

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)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 明顯的二合一問題。貪心的想,要個數最少,那麼久從頁數多的開始選。於是對於前50%的數據,可以直接預處理(1~x,1~y)矩陣內大於等於k的元素個數、元素之和的首碼和,然後二分k值來驗證;對於後50%的數據,已經退化為一維情形,若再使用前面的方法會mle(5e5 1e3 4),那麼考慮使用主席樹來維護 ...
  • git之vim編輯器退出命令 張文軍微博主頁 張文軍碼雲主頁 張文軍新浪雲主頁 張文軍博客主頁 剛學習git,好多東西沒接觸過,進入vim後不知道如何出來了,網上找了很多都說是:esc +shift+wq 。 然而我試了好幾次都不行,最後發現是:esc + : + qw ,這樣就一下退出編輯了。 ...
  • 搜索二叉樹是一種具有良好排序和查找性能的二叉樹數據結構,包括多種操作,本篇只介紹插入,排序(遍歷),和刪除操作,重點是刪除操作比較複雜,用到的例子也是本人親自畫的 用到的測試圖數據例子 第一、構建節點 1 template <typename T> class BST; 2 template <ty ...
  • 本文詳細介紹如何向maven倉庫中上傳第三方jar包。 1、在本地maven安裝路徑中找到conf文件夾下麵的setting.xml文件,裡面有訪問maven倉庫的路徑和賬號、密碼; 2、瀏覽器打開第一步中找到的路徑; 3、打開頁面後點擊Log In輸入username、password進行登錄。 ...
  • 本節內容主要介紹了C語言程式的常量和變數。介紹了常量和變數的概念以及命名規範,然後講解了它們的一些基本使用方法。 ...
  • 管理屬性的幾種方式 在python中訪問、設置、刪除對象屬性的時候,有以下幾種方式: 1. 使用內置函數getattr()、setattr()和delattr() 2. 自己編寫 、`setter() deleter()`方法 3. 重載 、`__setattr__() __delattr__() ...
  • 等了好久終於等到今天,盼了好久終於把夢實現,啦啦啦.....學習python兩個多月了,終於等到python的高潮,老師說要是把Django學會了,python的web開發就差不多了,也相當於迎來了python學習之路最重要一環節,也是框架中比較難的,所以也是迎來了最大難點,好高興哦,可以上課開飛機 ...
  • 園友們好,元旦很快就到來了,提前祝各位園友們元旦快樂,今天給大家分享一個工作中必用一個知識點,就是使用枚舉構建自定義異常並應用於springboot的異常處理器。開始之前我先把這個案例的結構大致說明一下: 1、使用idea創建一個springboot的Gradle/Maven項目,引入web模塊即可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...