1. 程式人生 > >python-時間模塊,random、os、sys、shutil、json和pickle模塊

python-時間模塊,random、os、sys、shutil、json和pickle模塊

第一個 class 發生 float trac 模擬 總結 shuffle 刪除

一、time與datetime模塊

time模塊:

  時間戳:表示的是從1970年1月1日00:00:00開始按秒計算的偏移量,返回類型為float類型

  格式化時間字符串(Format String)

  結構化的時間(struct_time):struct_time元組共有9個元素(年月日時分秒,一年中的第幾周,一年中的第幾天,夏令時)

技術分享圖片
# print(time.time())#1533962144.060534
# print(time.localtime())#time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=12, tm_min=36, tm_sec=4, tm_wday=5, tm_yday=223, tm_isdst=0)
# print(time.localtime(1533962144.060534))#time.struct_time(tm_year=2018, tm_mon=8, tm_mday=11, tm_hour=12, tm_min=35, tm_sec=44, tm_wday=5, tm_yday=223, tm_isdst=0) # print(time.gmtime()) # UTC時區的struct_time # print(time.strftime("%Y-%m-%d %X"))#2018-08-11 12:37:32 把一個代表時間的元組或者struct_time轉化為格式化的時間字符串
# print(time.strftime("%Y-%m-%d %H:%M:%S"))#2018-08-11 12:54:11 # print(time.strptime(‘2012-10-10‘,‘%Y-%m-%d‘))把格式化時間轉換為結構化 # mktime(t) : 將一個struct_time結構化時間轉化為時間戳。 # print(time.mktime(time.localtime()))#1533962846.0 #格林威治時間 #asctime([t]) : 把一個表示時間的元組或者struct_time表示為這種形式:‘Sun Jun 20 23:21:05 1993‘
# print(time.ctime())#Sat Aug 11 12:50:17 2018 把一個時間戳(按秒計算的浮點數)轉化為time.asctime()的形式
View Code

datetime模塊:

包含如下類:

技術分享圖片

技術分享圖片
# datetime模塊
import datetime
print(datetime.datetime.now())#2018-08-11 13:08:02.573983

# print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #當前時間-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當前時間+3小時
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #當前時間+30分
print (datetime.datetime.now() + datetime.timedelta(days=30,hours=1,minutes=1,seconds=1))

# 替換時間:replace 可替換某個時間的值
res = datetime.datetime.now()
res = res.replace(year=1997)
print(res)
View Code

二、random模塊

技術分享圖片
# print(random.random())# 用於產生一個  0<=x<1 之間的隨機浮點數   開閉
# print(random.randint(1,8))# random.randint(a, b),用於生成一個指定範圍內的整數  開開
# print(random.randrange(1,8,3))# random.randrange([start], stop[, step])
# print(random.choice([1,2,32,3,2,"哈哈"]))#random.choice(sequence)從中選一個
# print(random.sample([1,2,32,3,2,"哈哈"],2)) #random.sample(sequence, k),從指定序列中隨機獲取指定長度的片斷。sample函數不會修改原有序列
# res = [1,2,32,3,2,"哈哈"]
# random.shuffle(res) #打亂原有列表中的元素
# print(res)
View Code

#註 :sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬於sequence

三、sys模塊

用來處理Python運行時配置以及資源,從而可以與前當程序之外的系統環境交互,如:Python解釋器。

技術分享圖片
import sys

print(sys.argv)#[‘D:/練習/時間至json模塊/時間模塊.py‘]
print(sys.version)#3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
print(sys.maxsize)#最大的int值
print(sys.path)#返回模塊的搜索路徑
print(sys.platform)#返回操作系統平臺名稱

# sys.exit() #(0是正常退出,其他為異常)
View Code

註:如果python中導入的package或module不在環境變量PATH中,那麽可以使用sys.path將要導入的package或module加入到PATH環境變量中。

實現模擬進度條:

技術分享圖片
"""
    當程序要進行耗時操作時例如  讀寫  網絡傳輸
    需要給用戶提示一個進度信息
    "[*********        ]"
    "[*********       ]"
    "[************    ]"
    "[****************]"
"""
# print("[*          ]")
# print("[**         ]")

print("[%-10s]" % ("*" * 1))
print("[%-10s]" % ("*" * 2))
print("[%-10s]" % ("*" * 3))
print("[%-10s]" % ("*" * 4))

# 比例 0 - 1     0.5
def progress(percent,width=30):
    percent = percent if percent <= 1 else 1
    text = ("\r[%%-%ds]" % width) % ("*" * int((width * percent)))
    text = text + "%d%%"
    text = text % (percent * 100)
    print(  text  , end="")

# 模擬下載
# 文件大小
import  time
file_size = 10240
# 已經下載大小
cur_size = 0
while True:
    time.sleep(0.5)
    cur_size += 1021
    progress(cur_size / file_size)
    if cur_size >= file_size:
        print()
        print("finish")
        break
View Code

四、os模塊

技術分享圖片
import os

print(os.getcwd())#獲取當前?工作?目錄,即當前python腳本?工作的?目錄路路徑

os.chdir(dirname)#  改變當前腳本?工作?目錄;相當於shell下cd

print(os.curdir)#返回當前?目錄,就是一個‘.‘
os.pardir  獲取當前?目錄的?父?目錄字符串串名:(..)
os.makedirs(dirname1/dirname2)#生成多層遞歸目錄
os.removedirs(dirname1)#若?目錄為空,則刪除,並遞歸到上?一級?目錄
os.mkdir(dirname)#?生成單級?目錄;相當於shell中mkdir dirname
os.rmdir(dirname) #刪除單級空?目錄,若?目錄不不為空則?無法刪除,報錯;相 當於shell中rmdir dirname
print(os.listdir(dirname))#列列出指定?目錄下的所有?文件和?子?目錄,包括隱藏?文件, 並以列列表?方式打印
os.remove(1.py)  #刪除?一個?文件
os.rename("oldname","newname")  重命名?文件/?目錄
os.stat(path/filename)  獲取?文件/?目錄信息
print(os.stat(D:\練習\時間至json模塊\時間模塊.py))

print(os.name ) #輸出字符串串指示當前使?用平臺。win->‘nt‘; Linux->‘posix‘
print(os.sep) #輸出操作系統特定的路路徑分隔符,win下為"\",Linux下為"/"
os.linesep #輸出當前平臺使?用的?行行終?止符,win下為"\t\n",Linux下為"\n"
print(os.pathsep)#輸出?用於分割?文件路路徑的字符串串 win下為;,Linux下為:
os.system("bash command")#  運?行行shell命令,直接顯示

print(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的大小
View Code

五、shutil模塊

該模塊擁有許多文件、文件夾、壓縮包等處理功能

技術分享圖片
import shutil

# shutil.copyfileobj(open(‘old.xml‘,‘r‘), open(‘new.xml‘, ‘w‘))
# shutil.copyfileobj(fsrc, fdst[, length])(copyfileobj方法只會拷貝文件內容)將文件內容拷貝到另一個文件中
# shutil.copyfile(‘f1.log‘, ‘f2.log‘)(copyfile只拷貝文件內容)
# shutil.copy(‘f1.log‘, ‘f2.log‘)  拷貝文件和權限
# shutil.copystat (src, dst) 拷?貝?文件狀態信息 後訪問 後修改 權限 提供兩 個?文件路路徑

# shutil.move (src, dst) 移動?目錄和?文件

# shutil.ignore_patterns(*patterns)忽略指定的文件。通常配合下面的copytree()方法使用。
# shutil.copytree (src, dst, symlinks=False, ignore=None) 拷?貝?目錄
#     symlinks:指定是否復制軟鏈接。小心陷入死循環。
#     ignore:指定不參與復制的文件,其值應該是一個ignore_patterns()方法。
#     copy_function:指定復制的模式

# shutil.rmtree 刪除?目錄 可以設置忽略略?文件
View Code

壓縮與解壓縮:

shutil 可以打包 但是?無法解包 並且打包也是調?用tarfile 和 zipFile完成 ,解壓需要按照格式調?用對應的模塊

打包:

import shutil
#將
/Users/jerry/PycharmProjects/package/packa ge1下的文件打包放置 /test/目錄

shutil.make_archive("test","tar","/Users/jerry/PycharmProjects/package/packa ge1")

ZipFile和TarFile

import zipfile

# 壓縮
z = zipfile.ZipFile(‘zfj.zip, w)
z.write(a.log)
z.write(data.data)
z.close()

# 解壓
z = zipfile.ZipFile(laxi.zip, r)
z.extractall()
z.close()
import tarfile

# 壓縮
tar = tarfile.open(your.tar,w)
tar.add(/Users/wupeiqi/PycharmProjects/bbs2.log, arcname=bbs2.log)
tar.add(/Users/wupeiqi/PycharmProjects/cmdb.log, arcname=cmdb.log)
tar.close()

# 解壓
tar = tarfile.open(your.tar,r)
tar.extractall()  # 可設置解壓地址
tar.close()

註:zipfile壓縮不會保留文件狀態信息,tarfile會保留

六、json和pickle模塊

1.序列化:把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化.反之則稱之為反序列化

2.序列化的好處

  1.數據持久保存

  2.跨平臺數據交互

1.json模塊:

  JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式

encoding(序列化):把python對象轉換成json字符串

decoding(反序列化):把json字符串轉換成python對象import json

# dumps把特定的對象序列化處理為字符串,外形和原來的長的一樣,如果直接將dict類型的數據寫入json文件中會發生報錯
# dic = {"name":‘zfj‘,"age" : 18}
# dic1 = json.dumps(dic)
# print(type(dic))#<class ‘dict‘>
# print(dic1)# {"name": "zfj", "age": 18}

# rdic = json.loads(dic1)#反序列化
# print(rdic)


name_emb = {a: 1111, b: 2222, c: 3333, d: 4444}

# 數據轉成str,並寫入到json文件中
json.dump(name_emb, open(‘db.json‘, "a"))

# 註:json.load() 用於從json文件中讀取數據
jsObj = json.load(open(db.json)) print(jsObj) print(type(jsObj))

2.pickle模塊

與json模塊不同的是pickle模塊序列化和反序列化的過程叫:pickling和unpickling

  pickling:將python對象轉換為字節流的過程

  unpickling:將字節流二進制文件或字節對象轉換成python對象的過程

技術分享圖片
import pickle

dic = {"name":zfj,"age" : 18}

# dumps&loads
# 序列化
# dic1 = pickle.dumps(dic)
# print(dic1)#b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00zfjq\x02X\x03\x00\x00\x00ageq\x03K\x12u.‘
# print(type(dic1))#<class ‘bytes‘>

#反序列化
# rdic = pickle.loads(dic1)
# print(rdic)#{‘name‘: ‘zfj‘, ‘age‘: 18}

# dump&load
# 序列化
with open(pickle.txt, wb) as f:
    pickle.dump(dic, f)

# 反序列化
with open(pickle.txt, rb) as f:
    rdic = pickle.load(f)
print(rdic)
View Code

總結: 

json是可以在不同語言之間交換數據的,而pickle只在python之間使用。

json只能序列化最基本的數據類型,而pickle可以序列化所有的數據類型,包括類,函數都可以序列化。

  

python-時間模塊,random、os、sys、shutil、json和pickle模塊