模塊進階

来源:https://www.cnblogs.com/panda-pandeyong/archive/2018/08/10/9442854.html
-Advertisement-
Play Games

一, 時間模塊 1. 時間格式 時間戳格式 / float 數據類型 / 格林威治時間 (給機器看的) print(time.time()) 結構化時間 / 時間對象 (從給機器看轉換成給人看的過度) 能夠通過 . 屬性名來獲取對象中的值 print(time.strftime( ' %Y-%m-% ...


一, 時間模塊

 

 1. 時間格式

  時間戳格式 / float 數據類型 / 格林威治時間  (給機器看的)

  print(time.time())

  結構化時間 / 時間對象  (從給機器看轉換成給人看的過度)

    能夠通過 . 屬性名來獲取對象中的值

    print(time.strftime( ' %Y-%m-%d ' ))

  格式化時間 / 字元串時間 / str數據類型  (主要方便給人們看的)

    可以通過你需要的格式來顯示時間

    time_obj = time.localtime()

 

 2. 

  struct_time 表示結構化時間 ; 

  Format string  表示格式化時間;

  Timestamp  表示時間戳時間.

 

print(time.time())    #表示此刻時間戳時間

print(time.localtime(1500000000))    #表示該時間戳的結構化時間

time_obj = time.localtime(1500000000)  #時間戳時間轉換成結構化時間
format_time = time.strftime('%y-%m-%d' , time_obj)    #結構化時間
                                       #轉換成格式化時間
 print(format_time)



#2018-8-8  格式化時間
struct_time = time.strptime('2018-8-8','%Y-%m-%d')    #格式化時間#轉換成結構化時間
print(struct_time)
print(time.mktime(struct_time))  #結構化時間轉換成時間戳時間

 

 

二, sys模塊  (和Python解釋器聯繫的)

  sys.ext()  結束程式 (強制解釋器停止)

  sys.argv

   print(sys.argv)  

    結果為列表類型 

    第一個元素是執行這個文件的時候,寫在Python命令後面的第一個值 之後的元素在執行Python

    的啟動的時候可以寫多個值(cmd中),都會被依次添加到列表中

 

三, os模塊

 

 

 print(os.getcwd()) 當前文件的工作路徑 即 在哪執行該文件,getcwd的結果就是哪個路徑 並非該

  文件路徑

 創建文件夾 / 刪除文件夾

  os.mkdir('dir/dir2') 創建單級文件夾  若 dir 目錄存在則 dir2 可以創建,否則不能創建

  os.makedirs('dir1/dir2/dir3')  創建多級文件夾  創建多級嵌套文件夾dir1 dir2 dir3  若文件夾存

    在則報錯

    os.makedirs('dir1/dir2/dir3' , exist_ok=True)  若存在不報錯,會覆蓋原文件夾

  os.rmdir('dir1dir2/dir3')  只能刪去一級   不能刪除非空文件夾

  os.removedirs('dir1dir2/dir3')   遞歸向上刪除文件夾,從最底層開始向上刪除空文件夾,若上一級目錄

    有其它文件則停止

 

 os.listdir()  查看某一路徑下的所有文件及其文件夾,以列表的形式存放

 

 os.stat()  獲取文件 / 目錄信息

 

 path系列

 

  os.path.abspath()  若給的是相對路徑則會返回絕對路徑,若給的路徑不規範 (/) 則會改正

  os.path.get.size()  查看文件 / 文件夾大小  (所有文件夾大小都是4096)

 

四, 序列化模塊

  字典,列表,數字,對象等序列化成字元串 (序列化)

  字元串反序列化成字典,列表,數字,對象等 (反序列化)

 1. 為什麼要序列化 

  把內容寫入文件

  網路傳輸數據

 2. 方法

  json : (限制較多)

dic = {'aaa':'bbb','ccc':'ddd'}
str_dic = json.dumps(dic)    #序列化
print(dic)
print(str_dic,type(dic))
#結果:
    {'aaa':'bbb','ccc':'ddd'}
    {"aaa":"bbb","ccc":"ddd"}  <class 'str'>
ret = json.loads(str_dic)  #  反序列化
print(ret,type(ret))
#結果:
{'aaa':'bbb','ccc':'ddd'} <class 'dict'>

  寫入文件:(對文件操作用dump /l oad)

dic = {'aaa':'bbb','ccc':'ddd'}
with open ('json_dump','w') as f:
    json.dump(dic,f)   # 把字典以字元串的方式寫入
with open ('json_dump') as f:
  print(type(json.load(f)))
#結果 <class 'dict'>
 

  3. json限制 :

  json格式的key必須是字元串數據類型

import  json
dic = {1:2,3:4}
str_dic = json.dumps(dic)
print(str_dic)
#結果 {"1":2,"3":4}
#json格式的 key 必須是字元串數據類型,如果是數字為 key,那麼dump之後就#    會強行轉換成字元串數據類型



dic = {'abc':(1,2,3)}    
str_dic = json.dumps(dic)
#json
print(str_dic)
new_dic = json.loads(str_dic)
print(new_dic)
#結果  {"abc":[1,2,3]}    {'abc':[1,2,3]}
#對元組做value的字典會把元組強制轉換成列表


dic = {(1,2,3):'abc'}    
str_dic = json.dumps(dic)
#json
print(str_dic)
#結果 報錯
#不支持,

 

  json格式中字元串只能是雙引號(" ")

  

lst = ['aa',123,'bb']
with open('json_demo','w' ) as f :
    json.dump(lst,f)
#結果 ["aa",123,"bb"]  若在文件中把雙引號改為單引號則反序列讀取報錯
with open ('json_dem') as f:
    ret = json.load(f)
    print(ret)
#結果 ['aa',123,'bb']

 

  能夠多次dump變數/對象,但是不能load多個變數/對象 , 可以用dumps/loads操作

 

  

  中文格式

dic = {'abc':(1,2,3) , 'cour':'中國'}
ret = json.dumps(dic)
print(ret)    # 在序列化中 漢子 會編程unicode編碼
#結果  {"abc":[1,2,3] , "cour":"\u4e2d\u56fd"}  
dic_new = json.load(ret)
print(dic_new)
#結果  {'abc':(1,2,3) , 'cour':'中國'}   不影響反序列化

 

  dumps中參數 ensure_ascii  表示用ascii存儲

 

  json 其他參數(存的時候浪費空間)

   左後一段中 : sort_keys=True表示以key的值排序 ; indent = 2 表示縮進單位 ; 

    separators = (',',':') 表示以 ',',':' 為分隔符 ; ensure_ascii = Flaser 表示用漢字

  set 類型不允許進行序列化

 

 pickle: (支持幾乎所有對象)

import pickle
dic = {1:(1,2),('a','b'):4} #key為數字,元組類型
pic_dic = pickle.dumps(dic)
print(pic_dic)
#結果 一串bytes類型(不會報錯)

new_dic = pickle.loads(pic_dic)
print(new_dic)
#結果 {1:(1,2),('a','b'):4}

 

  對於對象序列化需要這個對象對應的類在記憶體中

class Student :
    def __init__(self,name,age) : 
        self.name = name
        self.age = age
hehe = Student('hehe',83)
with open('pickle_demo', 'wb' ) as f :
    pickle.dump(hehe,f)

with open('pickle_demo', 'rb' ) as f :
    haha = pickle.load(f)
    print(haha)    #結果  hehe

# 在對文件操作時應該以 rb / wb 等的形式打開  pickle 只支持bytes類型

  

  能夠多次dump變數/對象,而且能load多個變數/對象 

    不可以for迴圈文件句柄,因為文件寫入是bytes類型,沒有分隔符,不能分行.

 

 

  shelve:  open()方法

  一次性存進去的key值,可以用key的方式全部拿出來,不用一個一個拿出來

  用法:

import shelve
f = shelve.open('shelve_demo')
f['key'] = {'k1':(1,2),'k2':'v2'}
f.close()

f = shelve.open('shelve_demo')
con = f['key']
f.close()
print(con)

#結果 {'k1':(1,2),'k2':'v2'}

  註意:shelve 不支持多個應用同一時間往同一個文件進行寫操作,但是在只讀操作下允

   許通過讀操作打開文件 . 然而讀操作時不穩定,不排除寫的可能.

 

 hashlib  (摘要演算法的模塊)

  能夠把一個字元串數據類型的變數轉換成一個定長的密文的字元串,字元串里的每一個字元

  都是十六進位

  對於同一個字元串,無論多長只要相同的,在任何環境下,多次執行,在任何語言中使用相同

  演算法/手段得到的結果永遠是相同的 , 只要是不是相同的字元串結果一定不同

  md5()演算法 : 32位的字元串

  update() ; hexdigest()  方法

  用法 : 登錄驗證 ;   文件內容的一致性校驗 ;   大文件的已執行校驗

 

  sha1()演算法 :40位的字元串

    用法和md5演算法相同

   md5演算法計算簡單,計算相對較快,

   sha1演算法相對複雜,計算速度慢

  註意 : 倆種演算法都不能倒推,不能直接通過密文的字元串倒推出原字元串值

 

  動態加鹽:  

md5obj = hashlib.md5(username)    #username 為鹽
#例如 : 游戲昵稱不一樣,動態加鹽後安全性更高
md5obj.update(passwd)    #對passwd進行加密/摘要

md5obj.hexdigest()

 

  檢驗倆個文件內容是否一致

 

  大文件的已執行校驗:

   對同一字元串的幾個階段的分別摘要的結果 , 和整體摘要結果一樣

md5_obj = hashlib.md5()
md5_obj.update('hello,dazhi,sb'.encode('utf-8'))
print(md5_obj.hexdigest())




md5_obj = hashlib.md5()
md5_obj.update('hello'.encode('utf-8'))
md5_obj.update('dazhi'.encode('utf-8'))
md5_obj.update('sb'.encode('utf-8'))
print(md5_obj.hexdigest())

 

 

 configparser

  有一個固定格式的配置文件

  有一個對應的模塊去幫你做這個文件的字元串處理

  

  用法:

import configparser    #導入模塊
config = configparser.Configparser()    #實例化對象

config['DEFAULT'] = {'Serve':'45'    
                      'Compre':'yes'
                      'Compre':'9'    
                            }          #將要寫入的組名和內容
#該組為全局組,可以通過其他組拿到
config['bitbucket.org']={'user':'hg'}

with open('example.ini','w') as f : config.write(f) #此write是config對象的,不是 f 句柄或文件的


print('
bitbucket.org' in config) #True  有該組則返回 T 沒有返回 F
print(config[
'bitbucket.org'] ['user'])  #hg


 

  增刪改操作

 

  logging

    功能 : 1. 日誌格式的規範  2. 操作的簡化  3. 日誌分級

   模塊的使用 :

    普通配置型  簡單的  可制定化差

    對象配置型  複雜的  可定製化強

   日誌的分級

     

  級別由高到低          

 

 

  配置報錯格式

import logging
logging.basicConfig(level=logging.INFO,
                format='%(asctime)s%(filename)s%[line:%(lineno)d]%(levelname)s%(message)s',
                 #報錯時間 ; 錯誤文件 ; 哪行報錯 ;報錯級別 ; 錯誤信息
                 datefmt='%a,%d %b %Y %H:%M:%S',#時間格式,可以自定義
                 filename='/tmp/test.log',  #把報錯寫入文件
                 filemode='w')
..........
#不能將一個log信息即輸出到屏幕 又輸出到文件

 

  logger對象的形式操作日誌文件

  既能往文件里輸入還能往屏幕上輸出

import logging

#  創建一個logger對象
logger = logging.getLogger()
 
#   創建一個文件操作符
fh = logging.FileHandler('logger.log',encoding='utf-8')
#   創建一個屏幕管理操作符
fh =  logging.StreamHandler()
#   創建一個日誌輸出的格式
format1 =  logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
#   文件管理操作符 綁定一個 格式
fh.setFormatter(format1)
# 
#   屏幕管理操作符 綁定一個 格式
sh.setFormatter(format1)
logger.setLevel(logging.DEBUG)
#   logger對象 綁定 文件管理操作符
logger .addHandler(fh)

#   logger對象 綁定 屏幕管理操作符
logger.addHandler()

logger.debug('debug message')
logger.info('我的信息')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

 

 

 

 

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 準備工作: 安裝itchat:安裝命令pip install itchat 1.導入itchat模塊,給文件傳輸助手發一句話 運行代碼,掃二維碼,也就是登陸網頁版微信,會自動將"你好,文件傳輸助手"傳輸到手機上。 itchat.send()是發送消息,“”裡面是想要發送的內容,toUserName是 ...
  • 雖然我是在jdk10環境下, 但是大體上和jdk8是差不多的. 總共有這麼多 本來想著一口氣把所有命令都邊學邊總結一下的, 結果發現....有些還真的不是很常用....或者說我這個水平還接觸不到那麼多. 於是我就把我能使用到的幾個常用的總結一下了. 當做是筆記了. jshell jshell啟動 j ...
  • 從最初的“Hello World”,走到面向對象。該回過頭來看看,教程中是否遺漏了什麼。 我們之前提到一句話,"Everything is Object". 那麼我們就深入體驗一下這句話。   需要先要介紹兩個內置函數,dir()和help() dir()用來查詢一個類或者對象所有屬性。你 ...
  •   函數最重要的目的是方便我們重覆使用相同的一段程式。 將一些操作隸屬於一個函數,以後你想實現相同的操作的時候,只用調用函數名就可以,而不需要重覆敲所有的語句。   函數的定義 首先,我們要定義一個函數, 以說明這個函數的功能。 def square_sum(a,b): c = ...
  • java中的多線程 Java是少數的幾種支持“多線程”的編程語言之一。大多數的編程語言只能順序運行多個單獨程式塊,無法同時運行不同的多個程式塊。java的“多線程”恰可以彌補這個缺憾,它可讓不同的程式塊併發執行,如此一來就可讓程式塊運行得更為流暢,同時也可達到多任務處理的目的。 先看一下單線程的情況 ...
  • 要瞭解Java垃圾收集機制,先理解JVM記憶體模式是非常重要的。今天我們將會瞭解JVM記憶體的各個部分、如何監控以及垃圾收集調優。 ...
  • sequence 序列 sequence(序列)是一組有順序的元素的集合 (嚴格的說,是對象的集合,但鑒於我們還沒有引入“對象”概念,暫時說元素)   序列可以包含一個或多個元素,也可以沒有任何元素。 我們之前所說的基本數據類型,都可以作為序列的元素。元素還可以是另一個序列,以及我們以後要 ...
  • 一、線程的狀態 線程一般具有五種狀態,即創建、就緒、運行、阻塞、終止。 它們之間的關係: 二、線程操作相關方法 1.設置和取得線程名稱。 如果不設置線程名稱,系統會自動分配線程名,一般格式為Thread-Xx 獲取當前線程用Thread.currentThread.getName(); 線程名稱的設 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...