Python--常用模塊

来源:https://www.cnblogs.com/yanjieli/archive/2018/12/02/10053183.html
-Advertisement-
Play Games

random 模塊 隨機:在某個範圍內取到每一個值的概率是相同的 練習:生成隨機驗證碼 # (1)4位數字的驗證碼 # 基礎版本 lis = '' for i in range(4): num = random.randint(0, 9) lis += str(num) print(lis) # 函 ...


random 模塊

隨機:在某個範圍內取到每一個值的概率是相同的

import random
# 隨機小數
print(random.random())          # 0-1之內的隨機小數
print(random.uniform(1, 5))     # 任意範圍之內的隨機小數


# 隨機整數
print(random.randint(1, 2))     # [1,2] 包含2在內的範圍內隨機取整數
print(random.randrange(1, 2))   # [1,2) 不包含2在內的範圍內隨機取整數
print(random.randrange(1, 10, 2))   # [1,10) 不包含10在內的範圍內隨機取奇數


# 隨機抽取
lst = [1, 2, 3, 'abc', ('wahaha', 'qqxing')]
ret = random.choice(lst)      # 隨機抽取一個值
print(ret)

ret1 = random.sample(lst, 2)    # 隨機抽取兩個值
print(ret1)


# 打亂順序  在原列表的基礎上做亂序
lst = [1, 2, 3, 'abc', ('wahaha', 'qqxing')]
random.shuffle(lst)
print(lst)

練習:生成隨機驗證碼

# (1)4位數字的驗證碼
# 基礎版本
lis = ''
for i in range(4):
    num = random.randint(0, 9)
    lis += str(num)
print(lis)

# 函數版本
def rand_code(n=4):
    lis = ''
    for i in range(n):
        num = random.randint(0, 9)
        lis += str(num)
    return lis
print(rand_code(6))


# (2)6位 數字+字母
def rand_code(n):
    code = ''
    for i in range(n):
        rand_num = str(random.randint(0, 9))
        rand_alph = chr(random.randint(97, 122))
        rand_alph_upper = chr(random.randint(65, 90))
        rand_num = random.choice([rand_num, rand_alph, rand_alph_upper])
        code += rand_num
    return code
ret = rand_code(4)
print(ret)


# (3)可控制驗證碼  數字 / 數字+字母
def rand_code(num, DefaultAlph=True):   # 當DefaultAlph=True時生成字母+數字的驗證碼, 為False時生成純數字驗證碼
    code = ''
    for i in range(num):
        rand_num = str(random.randint(0, 9))
        if DefaultAlph:
            rand_alph = chr(random.randint(97, 122))
            rand_alph_upper = chr(random.randint(65, 90))
            rand_num = random.choice([rand_num, rand_alph, rand_alph_upper])
        code += rand_num
    return code
ret = rand_code(4, DefaultAlph=False)
print(ret)
生成驗證碼

time 模塊

#常用方法
1.time.sleep(secs)
(線程)推遲指定的時間運行。單位為秒。
2.time.time()
獲取當前時間戳

表示時間的三種方式

在python中,通常用這三種方式表示時間:時間戳、格式化的時間字元串、元組(struct_time)。

  • 時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。
  • 格式化的時間字元串(Format String): ‘1999-12-06’
    %y 兩位數的年份表示(00-99%Y 四位數的年份表示(000-9999%m 月份(01-12%d 月內中的一天(0-31%H 24小時制小時數(0-23%I 12小時制小時數(01-12%M 分鐘數(00=59%S 秒(00-59%a 本地簡化星期名稱
    %A 本地完整星期名稱
    %b 本地簡化的月份名稱
    %B 本地完整的月份名稱
    %c 本地相應的日期表示和時間表示
    %j 年內的一天(001-366%p 本地A.M.或P.M.的等價符
    %U 一年中的星期數(00-53)星期天為星期的開始
    %w 星期(0-6),星期天為星期的開始
    %W 一年中的星期數(00-53)星期一為星期的開始
    %x 本地相應的日期表示
    %X 本地相應的時間表示
    %Z 當前時區的名稱
    %% %號本身
    python中時間日期格式化符號:
  • 元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)
    索引(Index) 屬性(Attribute) 值(Values)
    0 tm_year(年) 比如2018
    1 tm_mon(月) 1-12
    2 tm_mday(日) 1-31
    3 tm_hour(時) 0-23
    4 tm_min(分) 0-59
    5 tm_sec(秒) 0-60
    6 tm_wday(weekday) 0-6(0表示周一)
    7 tm_yday(一年中的第幾天) 1-366
    8 tm_isdst(是否是夏令時) 預設為0

認識Python中表示時間的幾種格式:

# 時間模塊
import time
# 時間戳
print(time.time())      # 返回當前時間的時間戳
# 結果>>> 1543743462.3950245

# 時間字元串
print(time.strftime('%Y-%m-%d %X'))
# 結果>>> 2018-12-02 17:39:58
print(time.strftime('%Y-%m-%d %H-%M-%S'))
# 結果>>> 2018-12-02 17-39-58

# 時間元組:localtime將一個時間戳轉換為當前時區的struct_time
print(time.localtime())
# 結果>>> time.struct_time(tm_year=2018, tm_mon=12, tm_mday=2, tm_hour=17, tm_min=43, tm_sec=44, tm_wday=6, tm_yday=336, tm_isdst=0)

小結:時間戳是電腦能夠識別的時間;時間字元串是人能夠看懂的時間;元組則是用來操作時間的。

time模塊相關方法:

time.localtime([secs]):將一個時間戳轉換為當前時區的struct_time;secs參數未提供,則以當前時間為準。
time.gmtime([secs]):和 localtime()類似;gmtime()方法是將一個時間戳轉換為UTC時區(0 時區)的struct_time。
time.time():返回當前時間戳
time.mktime(t):將一個time.struct_time轉為時間戳
time.sleep(secs):線程推遲指定的時間運行,單位為秒
time.asctime([t]):把一個表示時間的元組或者struct_time表示為這種形式:'Sun Dec  2 17:52:36 2018'。如果沒有參數,預設將time.localtime()作為參數傳入
time.ctime([t]):把一個時間戳(按秒計算的浮點數)轉為time.asctime()的形式。如果參數未給或者為None的時候,預設將time.time()作為參數,相當於time.asctime(time.localtime(secs))
time.strftime(format[, t]):把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉為格式化的時間字元串,如果t未指定,預設傳入time.localtime()
time.strptime(string[, format]):把一個格式化時間字元串轉化為struct_time。實際上它和strftime()是逆操作

幾種格式之間的轉化

# 時間戳——>結構化時間
# time.gmtime(時間戳)      #UTC時間,與英國倫敦當地時間一致
# time.localtime(時間戳)   #當地時間。例如我們現在在北京執行這個方法:與UTC時間相差8小時,UTC時間+8小時 = 北京時間
print(time.gmtime(1510000000))
#結果>>> time.struct_time(tm_year=2017, tm_mon=11, tm_mday=6, tm_hour=20, tm_min=26, tm_sec=40, tm_wday=0, tm_yday=310, tm_isdst=0)
print(time.localtime())
#結果>>> time.struct_time(tm_year=2018, tm_mon=12, tm_mday=2, tm_hour=18, tm_min=4, tm_sec=23, tm_wday=6, tm_yday=336, tm_isdst=0)

# 結構化時間——>時間戳
# time.mktime(結構化時間)
time_tuple = time.localtime(1510000000)
print(time.mktime(time_tuple))
#結果>>> 1510000000.0
# 結構化時間——>字元串時間
# time.strftime("格式定義","結構化時間")  結構化時間參數若不傳,則顯示當前時間
print(time.strftime("%Y-%m-%d %X"))
#結果>>> 2018-12-02 18:07:47
print(time.strftime("%Y-%m-%d", time.localtime(1510000000)))
#結果>>> 2017-11-07

# 字元串時間——>結構化時間
# time.strptime(時間字元串,字元串對應格式)
print(time.strptime("2018-02-22", "%Y-%m-%d"))
#結果>>> time.struct_time(tm_year=2018, tm_mon=2, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=53, tm_isdst=-1)
print(time.strptime("2018/03/01", "%Y/%m/%d"))
#結果>>> time.struct_time(tm_year=2018, tm_mon=3, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=60, tm_isdst=-1)

# 結構化時間 ——> %a %b %d %H:%M:%S %Y串
# time.asctime(結構化時間) 如果不傳參數,直接返回當前時間的格式化串
print(time.asctime(time.localtime(1510000000)))
#結果>>> Tue Nov  7 04:26:40 2017
print(time.asctime())
#結果>>> Sun Dec  2 18:12:19 2018

# 時間戳 ——> %a %b %d %H:%M:%S %Y串
# time.ctime(時間戳)  如果不傳參數,直接返回當前時間的格式化串
print(time.ctime())
#結果>>> Sun Dec  2 18:13:14 2018
print(time.ctime(1510000000))
#結果>>> Tue Nov  7 04:26:40 2017
# 結構化時間
struct_time = time.localtime()
struct_time = time.strptime('%s-%s-1'%(struct_time.tm_year,struct_time.tm_mon),'%Y-%m-%d')
print(time.mktime(struct_time))
# 格式化時間
ret = time.strftime('%Y-%m-1')
struct_time = time.strptime(ret,'%Y-%m-%d')
print(time.mktime(struct_time))
計算本月一號的時間戳時間

datetime 模塊

相比於time模塊,datetime模塊的介面則更直觀,更容易調用

  • datetime模塊定義了下麵這幾個類:
  • datetime.date:表示日期的類;常用的屬性有year, month, day;
  • datetime.time:表示時間的類;常用的屬性有hour, minute, second, microsecond;
  • datetime.datetime:表示日期時間。
  • datetime.timedelta:表示時間間隔,即兩個時間點之間的長度。
  • datetime.tzinfo:與時區有關的相關信息。
import datetime
print(datetime.datetime.now())  # 現在的時間
# 只能調整的欄位:weeks days hours minutes seconds
print(datetime.datetime.now() + datetime.timedelta(weeks=3))     # 三周後
print(datetime.datetime.now() + datetime.timedelta(weeks=-3))    # 三周前
print(datetime.datetime.now() + datetime.timedelta(days=-3))     # 三天前
print(datetime.datetime.now() + datetime.timedelta(days=3))      # 三天後
print(datetime.datetime.now() + datetime.timedelta(hours=5))     # 5小時後
print(datetime.datetime.now() + datetime.timedelta(hours=-5))    # 5小時前
print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分鐘前
print(datetime.datetime.now() + datetime.timedelta(minutes=15))  # 15分鐘後
print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前
print(datetime.datetime.now() + datetime.timedelta(seconds=70))  # 70秒後

current_time = datetime.datetime.now()
# 可直接調整到指定的 年 月 日 時 分 秒 等

print(current_time.replace(year=1977))  # 直接調整到1977年
print(current_time.replace(month=1))  # 直接調整到1月份
print(current_time.replace(year=1989,month=4,day=25))  # 1989-04-25 18:49:05.898601

# 將時間戳轉化成時間
print(datetime.date.fromtimestamp(1232132131))  # 2009-01-17

sys 模塊

sys模塊是與python解釋器交互的一個介面

sys.argv           命令行參數List,第一個元素是程式本身路徑,(類似shell中調用腳本後面傳入的$1,$2,$3)
sys.exit(n)        退出程式,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version        獲取Python解釋程式的版本信息
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform       返回操作系統平臺名稱
name = sys.argv[1]
pwd = sys.argv[2]
if name == 'xiaobai' and pwd == 'a123456':
    print('執行以下代碼')
else:
    exit()
sys.argv用法

os 模塊

os 模塊是與操作系統交互的一個介面

#當前執行這個python文件的工作目錄相關的工作路徑
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.popen("bash command).read()  運行shell命令,獲取執行結果
os.environ  獲取系統環境變數

#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.stat('path/filename')  獲取文件/目錄信息 的結構說明

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)是創建時間(詳細信息參見平臺的文檔)。
stat 結構

練習

import os, sys

SIZE = 0
def countDirSize(path):
    global SIZE
    pathDirList = os.listdir(path)
    for fileName in pathDirList:
        newAbsPath = os.path.join(path, fileName)
        if os.path.isdir(newAbsPath):
            SIZE += os.path.getsize(newAbsPath)
            countDirSize(newAbsPath)
        else:
            SIZE += os.path.getsize(newAbsPath)
def win():
    path = input('請輸入需要統計的目錄>>> ')
    if os.path.exists(path):
        countDirSize(path)
    else:
        print("請輸入正確的路徑...")
        exit()
    return SIZE

def linux():
    path = sys.argv[1]
    if os.path.exists(path):
        countDirSize(path)
    else:
        print("請輸入正確的路徑...")
        exit()
    return SIZE
if __name__ == '__main__':
    if os.name == "nt":
        print(win())
    elif os.name == "posix":
        print(linux())
統計目錄大小

 


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

-Advertisement-
Play Games
更多相關文章
  • 隨著電腦革命的發展,“不安全”的編程方式已逐漸成為編程代價高昂的主因之一。 C++引入了構造囂(constructor)的概念,這是一個在創建對象時被自動調用的特殊方法。Java中也採用了構造器,並額外提供了“垃圾回收器”。對於不再使用的記憶體資源,垃圾回收器能自動將其釋放。 5.1 用構造器確保初 ...
  • 概述 spring boot starter actuator:是一個用於暴露自身信息的模塊,主要用於監控與管理。 為了保證actuator暴露的監控介面的安全性,需要添加安全控制的依賴spring boot start security依賴,訪問應用監控端點時,都需要輸入驗證信息。 關鍵配置: A ...
  • 有關Python解釋器的信息 與所有其他模塊一樣,必須使用import語句導入sys模塊,即 。 sys模塊提供有關Python解釋器的常量,函數和方法。dir(系統)給出了可用常量,函數和方法的摘要。另一種可能是help()函數。使用help(sys)提供有價值的詳細信息。 模塊sys中,例如,最 ...
  • socket的使用 socket.socket(網路層ip協議蔟,傳輸層協議類型,預設協議) socket的通信過程 socket的應用 ...
  • 協程: 協程,又稱微線程,纖程。英文名Coroutine。 可以在不同的函數間切換,而且切換的次數和時間都是由用戶自己確定的。 協程的幾種實現方式: (1)使用生成器yield實現。 如果不瞭解生成器可以閱讀我的另一篇文章:python生成器的簡單理解 下麵就來寫一個簡單的協程程式。 這段代碼的執行 ...
  • Java開發學習心得(二):Mybatis和Url路由 序號接上一篇 "Java開發學習心得(一):SSM環境搭建" 1.3 Mybatis MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google ...
  • 用JavaPOI導出Excel時,我們會考慮到Excel版本及數據量的問題。針對不同的Excel版本,要採用不同的工具類。HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls;XSSFWorkbook:是操作Excel2007的版本,擴展名是.xlsx。用過... ...
  • 同步/非同步(描述網路通信模式,適用於請求 響應模型) 同步:發送方發送請求後,需要等待接收響應,結果占用並浪費了CPU資源 非同步:發送方發送請求後,不需要響應,可以繼續發送下一個請求,或者主動掛起線程並釋放CPU資源 阻塞/非阻塞(描述進程的函數方法調用方式) 阻塞:IO 調用會一直阻塞,直至調用結 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...