Python學習之路:time和datetime模塊
轉自:http://blog.51cto.com/egon09/1840425
一:內建模塊
-
time和datetime(http://www.jb51.net/article/49326.htm)
在Python中,通常有這幾種方式來表示時間:1)時間戳 2)格式化的時間字符串 3)元組(struct_time)共九個元素。由於Python的time模塊實現主要調用C庫,所以各個平臺可能有所不同。
UTC(Coordinated Universal Time,世界協調時)亦即格林威治天文時間,世界標準時間。在中國為UTC+8。DST(Daylight Saving Time)即夏令時。
時間戳(timestamp)的方式:通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。返回時間戳方式的函數主要有time(),clock()等。
元組(struct_time)方式:struct_time元組共有9個元素,返回struct_time的函數主要有gmtime(),localtime(),strptime()。下面列出這種方式元組中的幾個元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#_*_coding:utf-8_*_
import time
# print(time.clock()) #返回處理器時間,3.3開始已廢棄 , 改成了time.process_time()測量處理器運算時間,不包括sleep時間,不穩定,mac上測不出來 # print(time.altzone) #返回與utc時間的時間差,以秒計算\
# print(time.asctime()) #返回時間格式"Fri Aug 19 11:14:16 2016",
# print(time.localtime()) #返回本地時間 的struct time對象格式
# print(time.gmtime(time.time()-800000)) #返回utc時間的struc時間對象格式
# print(time.asctime(time.localtime())) #返回時間格式"Fri Aug 19 11:14:16 2016",
#print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上 # 日期字符串 轉成 時間戳
# string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #將 日期字符串 轉成 struct時間對象格式
# print(string_2_struct)
# #
# struct_2_stamp = time.mktime(string_2_struct) #將struct時間對象轉成時間戳
# print(struct_2_stamp)
#將時間戳轉為字符串格式
# print(time.gmtime(time.time()-86640)) #將utc時間戳轉換成struct_time格式
# print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將utc struct_time格式轉成指定的字符串格式
#時間加減
import datetime
# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#print(datetime.date.fromtimestamp(time.time()) ) # 時間戳直接轉成日期格式 2016-08-19
# print(datetime.datetime.now() )
# 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分
#
# c_time = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #時間替換
|
格式參照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
% a 本地(locale)簡化星期名稱
% A 本地完整星期名稱
% b 本地簡化月份名稱
% B 本地完整月份名稱
% c 本地相應的日期和時間表示
% d 一個月中的第幾天( 01 - 31 )
% H 一天中的第幾個小時( 24 小時制, 00 - 23 )
% I 第幾個小時( 12 小時制, 01 - 12 )
% j 一年中的第幾天( 001 - 366 )
% m 月份( 01 - 12 )
% M 分鐘數( 00 - 59 )
% p 本地am或者pm的相應符 一
% S 秒( 01 - 61 ) 二
% U 一年中的星期數。( 00 - 53 星期天是一個星期的開始。)第一個星期天之前的所有天數都放在第 0 周。 三
% w 一個星期中的第幾天( 0 - 6 , 0 是星期天) 三
% W 和 % U基本相同,不同的是 % W以星期一為一個星期的開始。
% x 本地相應日期
% X 本地相應時間
% y 去掉世紀的年份( 00 - 99 )
% Y 完整的年份
% Z 時區的名字(如果不存在為空字符)
% % ‘ % ’字符
|
時間關系轉換
更多點擊這裏
2.random模塊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/usr/bin/env python
#_*_encoding: utf-8_*_
import random
print (random.random()) #0.6445010863311293
#random.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0
print (random.randint( 1 , 7 )) #4
#random.randint()的函數原型為:random.randint(a, b),用於生成一個指定範圍內的整數。
# 其中參數a是下限,參數b是上限,生成的隨機數n: a <= n <= b
print (random.randrange( 1 , 10 )) #5
#random.randrange的函數原型為:random.randrange([start], stop[, step]),
# 從指定範圍內,按指定基數遞增的集合中 獲取一個隨機數。如:random.randrange(10, 100, 2),
# 結果相當於從[10, 12, 14, 16, ... 96, 98]序列中獲取一個隨機數。
# random.randrange(10, 100, 2)在結果上與 random.choice(range(10, 100, 2) 等效。
print (random.choice( ‘liukuni‘ )) #i
#random.choice從序列中獲取一個隨機元素。
# 其函數原型為:random.choice(sequence)。參數sequence表示一個有序類型。
# 這裏要說明一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。
# list, tuple, 字符串都屬於sequence。有關sequence可以查看python手冊數據模型這一章。
# 下面是使用choice的一些例子:
print (random.choice( "學習Python" )) #學
print (random.choice([ "JGood" , "is" , "a" , "handsome" , "boy" ])) #List
print (random.choice(( "Tuple" , "List" , "Dict" ))) #List
print (random.sample([ 1 , 2 , 3 , 4 , 5 ], 3 )) #[1, 2, 5]
#random.sample的函數原型為:random.sample(sequence, k),從指定序列中隨機獲取指定長度的片斷。sample函數不會修改原有序列。
|
實際應用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/usr/bin/env python
# encoding: utf-8
import random
import string
#隨機整數:
print ( random.randint( 0 , 99 )) #70
#隨機選取0到100間的偶數:
print (random.randrange( 0 , 101 , 2 )) #4
#隨機浮點數:
print ( random.random()) #0.2746445568079129
print (random.uniform( 1 , 10 )) #9.887001463194844
#隨機字符:
print (random.choice( ‘abcdefg&#%^*f‘ )) #f
#多個字符中選取特定數量的字符:
print (random.sample( ‘abcdefghij‘ , 3 )) #[‘f‘, ‘h‘, ‘d‘]
#隨機選取字符串:
print ( random.choice ( [ ‘apple‘ , ‘pear‘ , ‘peach‘ , ‘orange‘ , ‘lemon‘ ] )) #apple
#洗牌#
items = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
print (items) #[1, 2, 3, 4, 5, 6, 7]
random.shuffle(items)
print (items) #[1, 4, 7, 2, 5, 3, 6]
|
生成隨機驗證碼:
1 2 3 4 5 6 7 8 9 10 |
import random
checkcode = ‘‘
for i in range ( 4 ):
current = random.randrange( 0 , 4 )
if current ! = i:
temp = chr (random.randint( 65 , 90 ))
else :
temp = random.randint( 0 , 9 )
checkcode + = str (temp)
print (checkcode)
|
3.os模塊
提供對操作系統進行調用的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 輸出用於分割文件路徑的字符串
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所指向的文件或者目錄的最後修改時間
|
更多點擊這裏
4.sys模塊
1 2 3 4 5 6 7 8 |
sys.argv 命令行參數 List ,第一個元素是程序本身路徑
sys.exit(n) 退出程序,正常退出時exit( 0 )
sys.version 獲取Python解釋程序的版本信息
sys.maxint 最大的 Int 值
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform 返回操作系統平臺名稱
sys.stdout.write( ‘please:‘ )
val = sys.stdin.readline()[: - 1 ]
|
5.shutil模塊
參考http://www.cnblogs.com/wupeiqi/articles/4963027.html
6.json和pickle模塊
用於序列化的兩個模塊
-
json,用於字符串 和 python數據類型間進行轉換
-
pickle,用於python特有的類型 和 python的數據類型間進行轉換
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
7. shelve模塊
shelve模塊是一個簡單的k,v將內存數據通過文件持久化的模塊,可以持久化任何pickle可支持的python數據格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import shelve
d = shelve. open ( ‘shelve_test‘ ) #打開一個文件
class Test( object ):
def __init__( self ,n):
self .n = n
t = Test( 123 )
t2 = Test( 123334 )
name = [ "alex" , "rain" , "test" ]
d[ "test" ] = name #持久化列表
d[ "t1" ] = t #持久化類
d[ "t2" ] = t2
d.close()
|
Python學習之路:time和datetime模塊