溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python學(xué)習(xí)—常用時(shí)間類與命名元組

發(fā)布時(shí)間:2020-06-25 20:02:39 來(lái)源:網(wǎng)絡(luò) 閱讀:788 作者:長(zhǎng)安223 欄目:編程語(yǔ)言

常用時(shí)間類與命名元組

1. 常用時(shí)間類
date 日期類
time 時(shí)間類
datetime
timedelat 時(shí)間間隔
2. 一些術(shù)語(yǔ)和約定的解釋:
1.時(shí)間戳(timestamp)的方式:通常來(lái)說(shuō),時(shí)間戳表示的是從1970年1月1日開始按秒計(jì)算的偏移量(time.gmtime(0))此模塊中的函數(shù)無(wú)法處理1970紀(jì)元年以前的時(shí)間或太遙遠(yuǎn)的未來(lái)(處理極限取決于C函數(shù)庫(kù),對(duì)于32位系統(tǒng)而言,是2038年)
2.UTC(Coordinated Universal Time,世界協(xié)調(diào)時(shí))也叫格林威治天文時(shí)間,是世界標(biāo)準(zhǔn)時(shí)間.在我國(guó)為UTC+8
3.DST(Daylight Saving Time)即夏令時(shí)
4.時(shí)間元組(time.struct_time對(duì)象, time.localtime方法)
5.字符串時(shí)間(time.ctime)

補(bǔ)充一下關(guān)于os模塊獲取文件時(shí)間信息的方法

import os
import time

info = os.uname()   #當(dāng)前主機(jī)信息
print(info)

atime = os.path.getatime('/etc/passwd')     #access_time    最近一次訪問(wèn)時(shí)間,時(shí)間戳
ctime = os.path.getctime('/etc/passwd')     #change_time    最近一次修改時(shí)間,時(shí)間戳
mtime = os.path.getmtime('/etc/passwd')     #modify_time    最近一次修改時(shí)間,時(shí)間戳

print(atime,'\n',ctime,'\n',mtime)

"""
輸出:
1536312601.7119284 
1535189498.464139 
1535189498.4471388
"""

#time.ctime返回當(dāng)前時(shí)間,也具有將時(shí)間戳改變格式的功能
print(time.ctime(atime))
print(time.ctime(ctime))
print(time.ctime(mtime))

"""
輸出:
Fri Sep  7 17:30:01 2018
Sat Aug 25 17:31:38 2018
Sat Aug 25 17:31:38 2018
"""
1.time類
import time
import os

#time.localtime()返回一個(gè)類似元組的結(jié)構(gòu),里面是時(shí)間各部分組成屬性
print(time.localtime())
"""
輸出:
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=8, tm_hour=9, tm_min=47, tm_sec=57, tm_wday=5, tm_yday=251, tm_isdst=0)
"""

ctime = os.path.getctime('/etc/group')

#time.localtime()也可以將時(shí)間戳轉(zhuǎn)換為類似元組結(jié)構(gòu),里面是時(shí)間各部分組成屬性.可以訪問(wèn)這些屬性
t = time.localtime(ctime)
print(t)
print(t.tm_year,t.tm_mon,t.tm_mday)
"""
輸出:
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=25, tm_hour=17, tm_min=31, tm_sec=38, tm_wday=5, tm_yday=237, tm_isdst=0)
2018 8 25
"""

t = time.ctime(ctime)
print(t)
"""
輸出:
Sat Aug 25 17:31:38 2018
"""

#保存到文件
with open('data.txt','a+') as f:
    f.write(t)

"""
*****把類似元組結(jié)構(gòu)的時(shí)間 轉(zhuǎn)換為時(shí)間戳格式*****
time.mktime()
"""
t = time.localtime()
t2 = time.mktime(t)
print(t2)
"""
輸出:
1536372128.0
"""

"""
*****自定義時(shí)間格式*****
time.strftime()

*****在Python內(nèi)部的strftime()方法說(shuō)明*****
def strftime(format, p_tuple=None): # real signature unknown; restored from __doc__

    # strftime(format[, tuple]) -> string
    # 
    # Convert a time tuple to a string according to a format specification.
    # See the library reference manual for formatting codes. When the time tuple
    # is not present, current time as returned by localtime() is used.
    # 
    # Commonly used format codes:
    # 
    # %Y  Year with century as a decimal number.
    # %m  Month as a decimal number [01,12].
    # %d  Day of the month as a decimal number [01,31].
    # %H  Hour (24-hour clock) as a decimal number [00,23].
    # %M  Minute as a decimal number [00,59].
    # %S  Second as a decimal number [00,61].
    # %z  Time zone offset from UTC.
    # %a  Locale's abbreviated weekday name.
    # %A  Locale's full weekday name.
    # %b  Locale's abbreviated month name.
    # %B  Locale's full month name.
    # %c  Locale's appropriate date and time representation.
    # %I  Hour (12-hour clock) as a decimal number [01,12].
    # %p  Locale's equivalent of either AM or PM.

"""

print(time.strftime('%m-%d'))
print(time.strftime('%Y-%m-%d'))
print(time.strftime('%T'))
print(time.strftime('%F'))
"""
輸出:
09-08
2018-09-08
10:37:06
2018-09-08
"""

"""
*****字符串格式轉(zhuǎn)為元組結(jié)構(gòu)*****
time.strptime()
"""
s = '2018-10-10'
print(time.strptime(s, '%Y-%m-%d'))
s_time = '12:12:30'
print(time.strptime(s_time, '%H:%M:%S'))
"""
輸出:
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=283, tm_isdst=-1)
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=12, tm_sec=30, tm_wday=0, tm_yday=1, tm_isdst=-1)
"""
2.datetime類
import datetime

d = datetime.date.today()
print(d)
"""
輸出:
2018-09-08
"""

distance = datetime.timedelta(days=5)   #間隔5天
print(d - distance)     #當(dāng)前時(shí)間后退5天
print(d + distance)     #當(dāng)前時(shí)間前進(jìn)5天
"""
輸出:
2018-09-03
2018-09-13
"""

d = datetime.datetime.now()
print(d)
distance = datetime.timedelta(hours=5)  #間隔5小時(shí)
print(d - distance)     #當(dāng)前時(shí)間后退5小時(shí)
print(d + distance)     #當(dāng)前時(shí)間前進(jìn)5小時(shí)
"""
輸出:
2018-09-08 10:29:40.324586
2018-09-08 05:29:40.324586
2018-09-08 15:29:40.324586
"""

實(shí)例
實(shí)現(xiàn)監(jiān)控:
1.獲取當(dāng)前主機(jī)信息,包含操作系統(tǒng)名字,主機(jī)名字,內(nèi)核版本,硬件架構(gòu)
2.開機(jī)時(shí)間,當(dāng)前時(shí)間,開機(jī)使用時(shí)長(zhǎng)
3.當(dāng)前登陸用戶

"""

使用虛擬環(huán)境 python3.7
安裝了psutil模塊
"""
import datetime
import psutil
import os

info = os.uname()
"""
uname()返回信息:
posix.uname_result(sysname='Linux', nodename='myhost', release='3.10.0-514.el7.x86_64', version='#1 SMP Wed Oct 19 11:24:13 EDT 2016', machine='x86_64')
"""

print('主機(jī)信息'.center(40,'*'))
print("""
    操作系統(tǒng):%s
    主機(jī)名字:%s
    內(nèi)核版本:%s
    硬件架構(gòu):%s
""" %(info.sysname,info.nodename,info.release,info.machine))

#獲取開機(jī)時(shí)間
boot_time = psutil.boot_time()
"""
boot_time()返回信息:(一個(gè)開機(jī)時(shí)間點(diǎn)的時(shí)間戳)
1536367043.0
"""

"""
將時(shí)間戳轉(zhuǎn)換為字符串格式:
1.time.ctime()
2.datetime.datetime.fromtimestamp()
"""
boot_time = datetime.datetime.fromtimestamp(boot_time)
"""
boot_time的值為:
2018-09-08 08:37:23
"""

#獲取當(dāng)前時(shí)間
now_time = datetime.datetime.now()
#獲取時(shí)間差
time = now_time - boot_time
"""
獲取到的當(dāng)前時(shí)間:2018-09-08 11:24:20.330670
獲取到的時(shí)間差:2:46:57.330670
"""

"""
用字符串的方法去掉毫秒部分
"""
now_time = str(now_time).split('.')[0]
time = str(time).split('.')[0]

print('開機(jī)信息'.center(40,'*'))
print("""
    當(dāng)前時(shí)間:%s
    開機(jī)時(shí)間:%s
    運(yùn)行時(shí)間:%s
""" %(now_time,boot_time,time))

#獲取登陸的用戶詳細(xì)信息
users = psutil.users()
"""
users()返回的結(jié)果:(類似列表結(jié)構(gòu))
[suser(name='kiosk', terminal=':0', host='localhost', started=1536367104.0, pid=1654), suser(name='kiosk', terminal='pts/0', host='localhost', started=1536367360.0, pid=2636)]
"""

"""
用列表生成式獲取我們想要的結(jié)果,
但是里面會(huì)有重復(fù)的記錄,這是因?yàn)橥粋€(gè)用戶可能開了多個(gè)shell
所以我們直接用集合,來(lái)達(dá)到去重的目的
"""
users = {'%s %s' %(user.name,user.host) for user in users}

print('登陸用戶'.center(40,'*'))
for user in users:
    print('\t %s' %user)

程序運(yùn)行結(jié)果:

******************主機(jī)信息******************

    操作系統(tǒng):Linux
    主機(jī)名字:myhost
    內(nèi)核版本:3.10.0-514.el7.x86_64
    硬件架構(gòu):x86_64

******************開機(jī)信息******************

    當(dāng)前時(shí)間:2018-09-08 11:42:48
    開機(jī)時(shí)間:2018-09-08 08:37:23
    運(yùn)行時(shí)間:3:05:25

******************登陸用戶******************
     kiosk localhost
3.命名元組namedtuple
namedtuple類位于collections模塊,namedtuple是繼承自tuple的子類。namedtuple和tuple比,有更多更酷的特性。
namedtuple創(chuàng)建一個(gè)和tuple類似的對(duì)象,而且對(duì)象擁有可以訪問(wèn)的屬性。
這對(duì)象更像帶有數(shù)據(jù)屬性的類,不過(guò)數(shù)據(jù)屬性是只讀的。

namedtuple能夠用來(lái)創(chuàng)建類似于元組的數(shù)據(jù)類型,除了能夠用索引來(lái)訪問(wèn)數(shù)據(jù),能夠迭代,還能夠方便的通過(guò)屬性名來(lái)訪問(wèn)數(shù)據(jù)。

在python中,傳統(tǒng)的tuple類似于數(shù)組,只能通過(guò)下表來(lái)訪問(wèn)各個(gè)元素,我們還需要注釋每個(gè)下表代表什么數(shù)據(jù)。通過(guò)使用namedtuple,每個(gè)元素有了自己的名字。類似于C語(yǔ)言中的struct,這樣數(shù)據(jù)的意義就可以一目了然。
from collections import namedtuple

Friend = namedtuple("Friend", ['name', 'age', 'email'])

f1 = Friend('hahaha', 33, 'hahaha@163.com')
print(f1)
print(f1.name,f1.age,f1.email)

f2 = Friend(name='wowowo', email='wowowo@sina.com', age=30)
print(f2)

name, age, email = f2
print(name, age, email)

運(yùn)行結(jié)果:

Friend(name='hahaha', age=33, email='hahaha@163.com')
hahaha 33 hahaha@163.com
Friend(name='wowowo', age=30, email='wowowo@sina.com')
wowowo 30 wowowo@sina.com
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI