1. 程式人生 > >常見模塊(續上次)

常見模塊(續上次)

eva 文件路徑 如何 shelve 格式化時間 寫入 python ... 字符串轉換

一.time模塊

  常用方法:

time.time() 獲取當前時間戳

time.sleep(t) 推遲指定的時間運行

  1.表示時間的三種方式:

   時間戳,格式化的時間字符串,時間元組

 1 #時間戳:
 2 print(time.time())
 3 #1502176744.8150175
 4 
 5 #格式化時間字符串
 6 print(time.strftime(%Y/%m/%d %H:%M:%S))
 7 2017/08/08 15:27:19
 8 
 9 #時間元組
10 #localtime將一個時間戳轉換為當前時區的struct_time
11
t = time.local() 12 #time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=15, tm_min=30, tm_sec=45, tm_wday=1, tm_yday=220, tm_isdst=0)

   總結:小結:時間戳是計算機能夠識別的時間;時間字符串是人能夠看懂的時間;元組則是用來操作時間的

#幾種格式之間的轉換

#時間戳-->結構化時間
#time.gmtime()  #英國倫敦當地時間 UTC
#time.localtime() #當地時間

#結構化時間-->時間戳
#time_tuple = time.localtime(1500000000)
#time.mktime(time_tuple) #1500000000.0 #結構化時間-->字符串格式化時間 #time.strftime("%Y-%m-%d",time.localtime(1500000000)) #‘2017-07-14‘ #字符串格式化時間-->結構化時間 #time.strptime("07/24/2017","%m/%d/%Y") #time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
#結構化時間-->%a %d %d %H:%M:%S %Y串
#time.asctime(time.localtime(1500000000)) #‘Fri Jul 14 10:40:00 2017‘ #time.asctime() #‘Mon Jul 24 15:18:33 2017‘ #%a %d %d %H:%M:%S %Y串 --> 結構化時間 #time.ctime(時間戳) 如果不傳參數,直接返回當前時間的格式化串 #time.ctime() #‘Tue Aug 8 15:56:20 2017‘ #time.ctime(1500000000) #‘Fri Jul 14 10:40:00 2017‘

二.random模塊

#import time

#隨機小數
#random.random()     (0-1小數)
#0.9167746266539144
#random.uniform(1,3)  (1-3小數)
#1.9542609515193614

#隨機整數
#random. randint(1,5)  (1-5間隨機整數,可取到5)
#2

#隨機選擇一個或者多個返回
#random.choice(1,5,[5,6])
#random.sample([[4,5],[89,58],99,66],2)
#2為返回的個數

#打亂列表順序
#li = [4,5,6,8,2,7]
#random.shuffle(li)  (返回值為None)
#print(li)
#[5, 6, 2, 7, 8, 4]  (每次返回結果順序不一樣)

三.osmo模塊

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

四.sys模塊

  sys模塊是與python解釋器交互的一個接口

#sys.argv           命令行參數List,第一個元素是程序本身路徑
#sys.exit(n)        退出程序,正常退出時exit(0)
#sys.version        獲取Python解釋程序的版本信息
#sys.maxint         最大的Int值
#sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
#sys.platform       返回操作系統平臺名稱

五.序列化模塊

  序列化定義:將原本列表、字典等內容專戶為字符串的過程

  eval():將字符串str當成有效的表達式來求值並返回計算結果

  缺點:雖然eval()也能實現此功能,但是安全性差

  1、以某種存儲形式使自定義對象持久化;

  2、將對象從一個地方傳遞到另一個地方。

  3、使程序更具維護性。

  對象持久化(對象持久化是指將內存中的對象保存到可永久保存的存儲設備中(如磁盤)的一種技術)

  Json模塊(dump,dumps,load,loads)

#dumps loads  
# import json
# dic = {‘k1‘:56,‘k2‘:85,‘k3‘:‘egon‘}
# dic_str = json.dumps(dic)
# print(type(dic_str),dic_str) #序列化
# <class ‘str‘> {"k1": 56, "k2": 85, "k3": "egon"}
# str_dict = json.loads(dic_str)
# print(type(str_dict),str_dict) #反序列化
# <class ‘dict‘> {‘k1‘: 56, ‘k2‘: 85, ‘k3‘: ‘egon‘}

#也可嵌套使用
# import json
# l = [1,[1,2,3],{‘k1‘:‘egon‘,‘k2‘:‘alex‘},5]
# l_str = json.dumps(l)
# print(type(l_str),l_str)
# # <class ‘str‘> [1, [1, 2, 3], {"k1": "egon", "k2": "alex"}, 5]
# str_l = json.loads(l_str)
# print(type(str_l),str_l)
 # <class ‘list‘> [1, [1, 2, 3], {‘k1‘: ‘egon‘, ‘k2‘: ‘alex‘}, 5]
import json
# f1 = open(‘json_file‘,‘w‘)
# dic = {‘k1‘:‘zhiku‘,‘k2‘:‘huawei‘,‘k3‘:‘chuanqi‘}
# json.dump(dic,f1)
# f.close()
 #dump方法接收一個文件句柄,直接將字典轉換成json字符串寫入文件

# f2 = open(‘json_file‘)
# dic1 = json.load(f2)
# print(type(dic1),dic1)
# <class ‘dict‘> {‘k1‘: ‘zhiku‘, ‘k2‘: ‘huawei‘, ‘k3‘: ‘chuanqi‘}
 #load方法接收一個文件句柄,直接將文件中的json字符串轉換成數據結構返回

  json&pickle模塊

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換
  • pickle模塊提供了四個功能:dumps、dump(序列化,存)、loads(反序列化,讀)、load (不僅可以序列化字典,列表...可以把python中任意的數據類型序列化
import pickle
dic = {k1:v1,k2:v2,k3:v3}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二進制內容
#b‘\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.‘

dic2 = pickle.loads(str_dic)
print(dic2)    #字典
#{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘}

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
#time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=9, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=252, tm_isdst=0)
f = open(pickle_file,wb)
pickle.dump(struct_time,f)
f.close()

f = open(pickle_file,rb)
struct_time2 = pickle.load(f)
print(struct_time.tm_year)
#2001

  shelve模塊

  shelve只提供給我們一個open方法,是用key來訪問的,使用起來和字典類似。

#import shelve
# f = shelve.open(‘shelve_file‘)
# f[‘key‘] ={‘k1‘:‘niucha‘,‘k2‘:‘daoxiang‘,‘k3‘:‘egon‘}#如果k不存在則報錯
# f.close()
# 
# f1 = shelve.open(‘shelve_file‘)
# existing = f1[‘key‘]
# f1.close()
# print(existing) 
# {‘k1‘: ‘niucha‘, ‘k2‘: ‘daoxiang‘, ‘k3‘: ‘egon‘}

  這個模塊有個限制:不支持多個程序同一時間往同一個文件中進行寫操作,如果只是讀文件,可以用其打開。

  shelve在默認情況下是不會記錄待持久化對象的任何修改的,所以我們在shelve.open()時候需要修改默認參數,否則對象的修改不會保存。

# import shelve
# f = shelve.open(‘shelve_file‘)
# print(f[‘key‘])
# f[‘key‘][‘new_value‘] = ‘this is a beautiful girl‘
# print(f[‘key‘])
# f.close()

# import shelve
# f1 = shelve.open(‘shelve_file‘,writeback=True)
# print(f1[‘key‘])
# f1[‘key‘][‘new_value‘] = ‘this is a beautiful girl‘
# print(f1[‘key‘])
# f1.close()
#{‘k1‘: ‘niucha‘, ‘k2‘: ‘daoxiang‘, ‘k3‘: ‘egon‘, ‘new_value‘: ‘this is a beautiful girl‘}

常見模塊(續上次)