os模塊,sys模塊,json / pickle模塊,logging模塊

来源:https://www.cnblogs.com/setcreed/archive/2019/09/27/11600885.html
-Advertisement-
Play Games

[TOC] OS模塊 能與操作系統交互,控制文件 / 文件夾 | 方法 | 詳解 | | : : | : : | | os.getcwd() | 獲取當前工作目錄,即當前python腳本工作的目錄路徑 | | os.chdir("dirname") | 改變當前腳本工作目錄;相當於shell下cd ...


目錄

OS模塊

能與操作系統交互,控制文件 / 文件夾

# 創建文件夾
import os
os.mkdir(r'D:\py_case\test')

# 刪除文件夾
os.rmdir(r'D:\py_case\test')

# # 列出指定目錄下所有文件和子目錄 (子目錄文件不會列出來)
res = os.listdir(r'D:\pycharm_project\Test')
print(res)
# 列印結果:['.idea', 'ex16.py', 'test.json', 'test.pkl', 'test.py']

# 列出當前文件所在的文件夾
res = os.getcwd()
print(res)
# 列印結果: D:\pycharm_project\Test

# 列出當前文件所在的具體路徑
# __file__ pycharm獨有的
res = os.path.abspath(__file__)  # 根據不同的操作系統更換不同的/或\
print(res)   # D:\pycharm_project\Test\test.py

# 文件的文件夾
res = os.path.dirname(os.path.abspath(__file__))
print(res)   # D:\pycharm_project\Test
res = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(res)    # D:\pycharm_project


# 拼接文件路徑
res = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'img', 'test.jpg')
print(res)   # D:\pycharm_project\Test\img\test.jpg


# 判斷路徑是否存在(文件 / 文件夾都適用)
res = os.path.exists(r'D:\pycharm_project\Test\ex16.py')
print(res)   # True


# 判斷是否為文件
res = os.path.isfile(r'D:\pycharm_project\Test\aaa')
print(res)  # False


# 刪除文件
os.remove('test.txt')

# 重命名文件
os.rename('test.txt', 'test2.txt')

# 判斷是否為文件夾
res = os.path.isdir(r'D:\pycharm_project\Test\aaa')
print(res)   #True


# 與終端交互,輸入命令
res = os.system('dir')
print(res)

res = os.walk(r'D:\pycharm_project\Test\aaa')
print(res)   # <generator object walk at 0x0000027DB46916D8>


res = os.walk(r'D:\pycharm_project\Test')
# print(res)
for dir, _, files in res:
    # print(i) # 所有文件夾名
    # print(l)  # 某個文件下對應的所有文件名
    for file in files:
        file_path = os.path.join(dir,file)  # 拼接成所有文件名
        if file_path.endswith('py'):   # 拿到py文件
            print(file_path)
            
            
# 列印結果:
'''
D:\pycharm_project\Test\ex16.py
D:\pycharm_project\Test\test.py
D:\pycharm_project\Test\aaa\12.py
'''
方法 詳解
os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname") 改變當前腳本工作目錄;相當於shell下cd
os.curdir 返回當前目錄: ('.')
os.pardir 獲取當前目錄的父目錄字元串名:('..')
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.sep 輸出操作系統特定的路徑分隔符,win下為"",Linux下為"/"
os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用於分割文件路徑的字元串 win下為;,Linux下為:
os.name 輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command") 運行shell命令,直接顯示
os.environ 獲取系統環境變數
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的大小

sys模塊

與python解釋器交互

import sys

## 最常用,當使用命令行式運行文件,接收多餘的參數
res = sys.argv
print(res)

方法 詳解
sys.argv 命令行參數List,第一個元素是程式本身路徑
sys.modules.keys() 返回所有已經導入的模塊列表
sys.exc_info() 獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息
sys.exit(n) 退出程式,正常退出時exit(0)
sys.hexversion 獲取Python解釋程式的版本值,16進位格式如:0x020403F0
sys.version 獲取Python解釋程式的版本信息
sys.maxint 最大的Int值
sys.maxunicode 最大的Unicode值
sys.modules 返回系統導入的模塊欄位,key是模塊名,value是模塊
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform 返回操作系統平臺名稱
sys.stdout 標準輸出
sys.stdin 標準輸入
sys.stderr 錯誤輸出
sys.exc_clear() 用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exec_prefix 返回平臺獨立的python文件安裝的位置
sys.byteorder 本地位元組規則的指示器,big-endian平臺的值是'big',little-endian平臺的值是'little'
sys.copyright 記錄python版權相關的東西
sys.api_version 解釋器的C的API版本

json和pickle模塊

序列化和反序列化

  • 序列化:按照特定的規則排列,把python數據類型轉化為json串,便於跨平臺傳輸
  • 反序列化:把json串轉化為python / java / c / php 需要的語言

Json序列化並不是python獨有的,json序列化在java等語言中也會涉及到,因此使用json序列化能夠達到跨平臺傳輸數據的目的。

json數據類型和python數據類型對應關係表

Json類型 Python類型
{} dict
[] list
"string" str
520.13 int或float
true/false True/False
null None

json模塊

dic = {'a': 1, 'b': 2, 'c': None}

data = json.dumps(dic)   # json串中沒有單引號
print(type(data), data)
data = json.loads(data)
print(type(data), data)

# 列印結果:
'''
<class 'str'> {"a": 1, "b": 2, "c": null}
<class 'dict'> {'a': 1, 'b': 2, 'c': None}
'''
dic = {'a': 1, 'b': 2, 'c': None}

# 序列化字典為json串,並保存文件
with open('test.json', 'w', encoding='utf-8') as fw:
    json.dump(dic, fw)
    
# 反序列化
with open(f'{"test"}.json', 'r', encoding='utf-8') as fr:
    data = json.load(fr)
    print(type(data), data)  # <class 'dict'> {'a': 1, 'b': 2, 'c': None}

pickle

Pickle序列化和所有其他編程語言特有的序列化問題一樣,它只能用於Python。但是pickle的好處是可以存儲Python中的所有的數據類型,包括對象,而json不可以。

import pickle

se = {1, 3, 4, 5, 6}
with open('test.pkl', 'wb') as fw:
    pickle.dump(se, fw)
se = {1, 3, 4, 5, 6}

def func():
    x = 3
    def wrapper():
        print(x)
    return wrapper

with open('test.pkl', 'wb') as fw:
    pickle.dump(func, fw)

with open('test.pkl', 'rb') as fr:
    data = pickle.load(fr)
    # print(data)
    res = data()
    res()

logging模塊

v1:

import logging

# 日誌級別(如果不設置,預設顯示30以上)
logging.info('info')   # 10
logging.debug('debug')     # 20
logging.warning('warning')   # 30
logging.error('error')     # 40
logging.critical('critical')  # 50

# 列印結果:
'''
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
'''

v2:

import logging

# 日誌的基本配置

logging.basicConfig(filename='access.log',
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    level=10)  # level是等級,10以上的都記錄日誌

logging.info('正常信息')  # 10
logging.debug('調試信息')  # 20
logging.warning('警告信息')  # 30
logging.error('報錯信息')  # 40
logging.critical('嚴重錯誤信息')  # 50


# 會創建一個access.log日誌:
'''
2019-09-27 21:57:45 PM - root - DEBUG -test: 調試信息
2019-09-27 21:57:45 PM - root - INFO -test: 正常信息
2019-09-27 21:57:45 PM - root - WARNING -test: 警告信息
2019-09-27 21:57:45 PM - root - ERROR -test: 報錯信息
2019-09-27 21:57:45 PM - root - CRITICAL -test: 嚴重錯誤信息

'''

v3: 自定義配置

import logging

# 1. 配置logger對象
cwz_logger = logging.Logger('cwz')
neo_logger = logging.Logger('neo')

# 2. 配置格式
formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s:  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p ', )

formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p', )

formmater3 = logging.Formatter('%(name)s %(message)s', )

# 3. 配置handler --> 往文件列印or往終端列印
h1 = logging.FileHandler('cwz.log')
h2 = logging.FileHandler('neo.log')
sm = logging.StreamHandler()

# 4. 給handler配置格式
h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
sm.setFormatter(formmater3)

# 5. 把handler綁定給logger對象
cwz_logger.addHandler(h1)
cwz_logger.addHandler(sm)
neo_logger.addHandler(h2)

# 6. 直接使用
cwz_logger.info(f'cwz 購買 變形金剛 8個')

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

-Advertisement-
Play Games
更多相關文章
  • Web應用安全管理 Web應用的安全管理,主要包括兩個方面的內容,一個是用戶身份的認證,即用戶登錄的設計,二是用戶授權,即一個用戶在一個應用系統中能夠執行哪些操作的許可權管理。許可權管理的設計一般使用角色來管理,即給一個用戶賦予哪些角色,這個用戶就具有哪些許可權。 Spring框架體系中,經典的安全體系框 ...
  • 一、協程 1.歷史進程: (1)3.4引入協程,用yield來實現 (2)3.5引入協程語法 (3)實現協程比較好的包有asyncio,tornado,gevent 2.定義:協程是為非搶占式多任務產生子程式的電腦程式組件,協程允許不同入口點在不同位置暫停或開始執行程式 3.從技術角度講,協程就是 ...
  • python面向函數式編程,模擬用戶登錄驗證、註冊的代碼實現。 主要有以下兩個文件: 1、user.txt文檔文件,相當於資料庫的用戶信息表,主要是記錄用戶名和密碼。 註意:1)此文檔需要與.py文件放在同一個路徑下。 2)用戶名、密碼在存儲時,是以$符號區別開。 2、模擬用戶登錄驗證、註冊的代碼實 ...
  • @[TOC]     下麵向大家介紹一下我在學習python課程的一些題目的解法,如果大家有什麼更好的解法請私信我。這裡只顯示題目與代碼。 1.快樂的數字     描述: 編寫一個演算法來確定一個數字是否“快樂”。 快樂的數字按照如下方式確定 ...
  • Spring框架主要包括IoC和AOP,這兩大功能都可以使用註解進行配置。 一、bean定義 二、依賴註入 三、使用Primary註解 四、Scope註解 五、方法註入 六、AOP註解 七、ComponentScan註解 ...
  • 在有道翻譯頁面中打開開發者工具,在Headers板塊找到Request URL以及相應的data。 上面這種很大可能被有道網頁給識別出來不是人工在訪問,而是代碼在訪問。 此時我們可以加個‘User-Agent’代理。通過設置User Agent來達到隱藏身份的目的,一般情況下瀏覽器是通過User-A ...
  • 目錄 "Java中的構造方法" "構造方法簡介" "構造方法實例" "例 1" "例 2" "Java中的幾種構造方法詳解" "普通構造方法" "預設構造方法" "重載構造方法" "java子類構造方法調用父類構造方法" "Java中的代碼塊簡介" "Java代碼塊使用" "局部代碼塊" "構造代碼 ...
  • 目錄 "抽象類介紹" "為什麼要用抽象類" "一個抽象類小故事" "一個抽象類小游戲" "介面介紹" "介面與類相似點:" "介面與類的區別:" "介面特性" "抽象類和介面的區別" "介面的使用:" "介面最佳實踐:設計模式中的工廠模式" "介面與抽象類的本質區別是什麼?" "基本語法區別" "設 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...