Python常用模塊學習 - time、datetime、os、sys、random、shutil

原文鏈接:https://blog.csdn.net/qq_33961117/article/details/82426287

目錄

一、time模塊:與時間相關功能

二、datetime 模塊:時間處理模塊

三、random:隨機數模塊

3-1 random - 生成隨機整形和字符,指定位數

3-1 random + string - 生產隨機整形+字符,隨機位數

四、sys 模塊:python解釋器系統相關模塊,多用於腳本編寫

4-1 sys模塊實例 - 打印進度條

五、shutil 模塊:簡化文件操作(文件的高級操作)

5-1  壓縮包處理 - zipfile 壓縮、解壓縮

5-2 壓縮包處理 -  tarfile 壓縮、解壓縮

六、os模塊:與操作系統進行交互的接口模塊

6-1 os 下常用函數

6-2 os.path 常用函數

6-3 os 的路徑處理

6-4 os.path 獲取文件元數據
————————————————
版權聲明:本文爲CSDN博主「林司逾」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33961117/article/details/82426287

一、time模塊:與時間相關功能
'''
time模塊:與時間相關的功能
        三種時間類型:
            1.時間戳(timestamp):從1970-01-01 到現在的秒數,用於取時間差
                time.time():用來計算時間間隔,返回浮點型
            2.本地時間(localtime):計算機當前所在位置的時間
                time.localtime():返回結構化時間
            3.世界協調時間(UTC)
                time.gmtime():返回結構化時間
        
        常用方法總結:
            1.時間戳:time.time()
                應用:用來計算時間間隔
            2.結構化時間:time.localtime() time.gtime()
                應用:1.單獨獲取當前時間的任意部分
                      2.用來時間戳與格式化輸出時間之間的轉換
            3.格式化的字符串形式:time.strftime('%Y-%m-%d')
                應用:方便的取出格式化字符串形式的時間,用來顯示
            
        datetime模塊 vs time模塊
            1.日期計算比time模塊方便
            datetime.datetime.now()+datetime.timedelta(days=3)
            2.時間戳轉換成字符串日期時間
            datetime.datetime.fromtimestamp(123123123)
'''
 
import time
 
print(time.time())
# 1536136291.5491552
 
print(time.strftime('%Y-%m-%d %X'))
# 2018-09-05 16:31:31
 
print(time.localtime())
# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=5, tm_hour=16, tm_min=31, tm_sec=31, tm_wday=2, tm_yday=248, tm_isdst=0)
 
print(time.gmtime())
# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=5, tm_hour=8, tm_min=31, tm_sec=31, tm_wday=2, tm_yday=248, tm_isdst=0)
 
# 格式化輸出日期
print(time.strftime('%Y-%m-%d %X'))
# 2018-09-05 16:31:31
 
# 將格式化字符串的時間轉換爲結構化時間
print(time.strptime("30 Nov 00", "%d %b %y"))
# time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
 
# 時間戳轉結構化,參數爲秒數,即1970年01-01過參數秒的結構化時間輸出
print(time.localtime(10))
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=10, tm_wday=3, tm_yday=1, tm_isdst=0)
 
# 結構化轉時間戳
print(time.mktime(time.localtime()))
# 1536136291.0
 
# 當前進程睡眠一段時間,單位爲秒 time.sleep()
time.sleep(2)
 
# 返回 星期英文簡寫 月 日 時間 年(Thu Aug  9 09:11:42 2018)
print(time.asctime())
# Wed Sep  5 16:31:33 2018
print(time.ctime())
# Wed Sep  5 16:31:33 2018
 
'''
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%M 分鐘數(00=59)
%m 月份(01-12)
%D 08/09/18 本地相應的日期表示
%d 月內中的一天(0-31)
%x 本地相應的日期表示
%X 本地相應的時間表示
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%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)星期一爲星期的開始
%Z 當前時區的名稱
%% %號本身
'''
二、datetime 模塊:時間處理模塊
# 比time方便清晰的時間計算。例:顯示三天後的時間格式化輸出
import datetime
 
# # 獲取時間 獲取當時時間,返回格式化字符時間
print(datetime.datetime.now())
# >>> 2018-09-05 16:37:11.811998
print(datetime.datetime.today())
# >>> 2018-09-05 16:37:11.811998
#
# # 單獨獲取某個時間 年 月
d = datetime.datetime.now()
print(d.year)  # >>> 2018
print(d.month)  # >>> 9
#
# # 將int轉或成格式時間
d1 = datetime.datetime(2018, 8, 9, 10)
print(d1)  # >>> 2018-08-09 10:00:00
 
# 計算兩個時間的差值 只能- 不能+
print(d - d1)  # >>>27 days, 6:37:11.811998
 
# 替換某個時間
print(d.replace(year=2020))  # >>> 2020-09-05 16:37:11.811998
 
# 表示時間差的模塊 timedelta
d2 = datetime.timedelta(days=1)
d3 = datetime.timedelta(weeks=1)
print(d2)  # 1 day, 0:00:00
print(d3 - d2)  # 6 days, 0:00:00
# timedelta 時間差可以和一個datetime 進行加減
print(d + d3)  # 2018-09-12 16:39:23.733509
a = datetime.datetime.now() + datetime.timedelta(days=3)
print(a)  # 2018-09-08 16:39:23.733509
 
b = datetime.datetime.fromtimestamp(123123123)
# 時間戳轉換成字符串日期時間
print(b)  # 1973-11-26 08:52:03
三、random:隨機數模塊
import random
 
# 0-1隨機浮點,不包含1
print(random.random())
# 0.5685792329553742
 
# a-b 隨機整數,包含頭尾
print(random.randint(1, 3))  # 3
 
# a-b 隨機整數,不包尾
print(random.randrange(1, 3))  # 2
 
# 容器隨機元素,包頭尾
print(random.choice([1, 2, 3]))  # 2
 
# 隨機從容器中取值,取X個值,包頭尾
print(random.sample([1, 2, 3], 2))  # [3, 2]
 
# 打亂可變容器的元素順序
l = [1, 2, 3, 4, 5, ]
random.shuffle(l)
print(l)  # [5, 2, 1, 3, 4]
 
# a-b取浮點數,不包頭尾
print(random.uniform(1, 2))  # 1.5748282541280614
3-1 random - 生成隨機整形和字符,指定位數
import random
 
 
def veri_code(i):
    res = ''
    for j in range(i):
        num = str(random.randint(0, 9))
        c = chr(random.randint(65, 90))
        s = random.choice([num, c])
        res += s
    return res
 
 
print(veri_code(4))
# 2D1A
3-1 random + string - 生產隨機整形+字符,隨機位數
import random,string
 
# 隨機生成5-15位數的字符串
range_token = ''.join(random.sample(string.ascii_letters + string.digits, random.randint(5, 15)))
# 1LDC5G
 

四、sys 模塊:python解釋器系統相關模塊,多用於腳本編寫
'''
sys python解釋器系統相關模塊,多用於腳本的編寫
    1 sys.argv           命令行參數List,第一個元素是程序本身路徑
    2 sys.exit(n)        退出程序,正常退出時exit(0)
    3 sys.version        獲取Python解釋程序的版本信息
    4 sys.maxint         最大的Int值
    5 sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
    6 sys.platform       返回操作系統平臺名稱
'''
4-1 sys模塊實例 - 打印進度條
import time
 
 
# print(("%%-%ds" %(30)) % '*')
 
def progress(percent, width=30):
    # print(('\r[%% -%ss]'% width)%('*'* int(percent * width)),end='')
    if percent > 1:
        percent = 1
    str = ('\r[%% -%ss]' % width) % ('*' * int(percent * width))
    print(str + '%d%%' % (percent * 100), end='')
 
 
# progress(0.5)
 
file_size = 1024
get_size = 0
while get_size < file_size:
    time.sleep(0.5)  # 模擬數據的網絡延遲
    get_size += 100
    p = get_size / file_size
    # print(p)
    progress(p)
 

五、shutil 模塊:簡化文件操作(文件的高級操作)
import shutil
 
# shutil.copyfileobj(fsrc, fdst[, length])
# 將文件內容拷貝到另一個文件中
shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w'))
 
# shutil.copyfile(src, dst) 拷貝文件
shutil.copyfile('f1.log', 'f2.log')  # 目標文件無需存在
 
# shutil.copymode(src,dst) 僅拷貝權限。(內容,組,用戶都不變)
shutil.copymode('f1.log', 'f2.log')  # 目標文件必須存在
 
# shutil.copystat() 拷貝狀態信息 包括:mode bits, atime, mtime, flags
shutil.copystat('f1.log', 'f2.log')  # 目標文件必須存在
 
# shutil.copy() 拷貝文件和權限
shutil.copy('f1.log', 'f2.log')
 
# shutil.copy2()拷貝文件和狀態信息
shutil.copy2('f1.log', 'f2.log')
 
# shutil.ignore_patterns(*patterns) 無視指定特點的文件
# shutil.copytree(src, dst, symlinks=False, ignore=None) (源文件,目標文件,硬連接,忽略)
# 遞歸的去拷貝文件夾
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
 
# 目標目錄不能存在,注意對folder2目錄父級目錄要有可寫權限,ignore的意思是排除
shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# 通常的拷貝都把軟連接拷貝成硬鏈接,即對待軟連接來說,創建新的文件
 
# shutil.rmtree(path) 遞歸的去刪除文件
shutil.rmtree('folder1')
 
# shutil.move(src, dst)遞歸的去移動文件 同文件夾內的重命名,更改路徑
shutil.move('folder1', 'folder3')
 
# shutil.make_archive(base_name, format,...)  創建壓縮包並返回文件路徑,僅限:zip、tar
# /data下的文件打包放置 /tmp/目錄
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')
5-1  壓縮包處理 - zipfile 壓縮、解壓縮
# zipfile壓縮解壓縮
import zipfile
 
# 壓縮
z = zipfile.ZipFile('laxi.zip', 'w')  # 指定壓縮包名,準備寫入文件
z.write('a.log')
z.write('data.data')  # 寫入文件
 
z.close()
# 解壓
z = zipfile.ZipFile('laxi.zip', 'r')  # 指定壓縮包名,準備讀取文件
z.extractall(path='.')  # 指定解壓路徑爲'.',即當前
z.close()
5-2 壓縮包處理 -  tarfile 壓縮、解壓縮
# tarfile壓縮解壓縮
import tarfile
 
# 壓縮
t = tarfile.open('/tmp/egon.tar', 'w')  # 指定壓縮包名,準備寫入文件
t.add('/test1/a.py', arcname='a.bak')  # arcname 指定入包後的名字
t.add('/test1/b.py', arcname='b.bak')  # 指定路徑寫入文件
t.close()
 
# 解壓
t = tarfile.open('/tmp/egon.tar', 'r')  # 指定壓縮包名,準備讀取文件
t.extractall('/egon')  # 指定解壓路徑
t.close()
 

六、os模塊:與操作系統進行交互的接口模塊
os 官方文檔

菜鳥教程 - os

菜鳥教程 - os.path

6-1 os 下常用函數
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 獲取系統環境變量
6-2 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.path.normpath(path) 規範path字符串形式(規範文件路徑)
6-3 os 的路徑處理
#方式一:推薦使用
import os,sys
possible_topdir = os.path.normpath(os.path.join(
        os.path.abspath(__file__),
        os.pardir, #上一級
        os.pardir,
        os.pardir
    ))
# 將路徑載入環境變量中
sys.path.insert(0,possible_topdir)
    
#方式二:不推薦使用
path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 返回項目文件夾
6-4 os.path 獲取文件元數據
import os
import time
 
file='/root/runoob.txt' # 文件路徑
 
os.path.getsize(file) # 輸出文件大小(字節爲單位)
# 3669
os.path.getatime(file) # 輸出最近訪問時間
# 1539052805.5735736
os.path.getctime(file) # 輸出文件創建時間
# 1539052805.5735736
os.path.getmtime(file) # 輸出最近修改時間
# 1539052805.5735736
time.gmtime(os.path.getmtime(file)) # 以struct_time形式輸出最近修改時間
# time.struct_time(tm_year=2018, tm_mon=10, tm_mday=9, tm_hour=2, tm_min=40, tm_sec=5, tm_wday=1, tm_yday=282, tm_isdst=0)
time.ctime(os.path.getmtime(file))
# 'Wed Apr 28 13:10:34 2010'
os.path.normpath(file) # 規範path字符串形式

————————————————
版權聲明:本文爲CSDN博主「林司逾」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33961117/article/details/82426287

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章