os模塊
作用:os模塊是python標準庫中的一個用于訪問操作系統功能的模塊, os模塊提供了其他操作系統接口,可以實現跨平臺訪問。
使用:
1 . 返回操作系統類型 :os.name
值為:posix 是linux操作系統
值為:nt 是windows操作系統
import os
print(os.name)
print('Linux' if os.name == 'posix' else 'Windows')運行結果為:
posix
Linux
2 . 操作系統的詳細信息
import osinfo = os.uname()
print(info)
print(info.sysname)
print(info.nodename)運行結果:
posix.uname_result(sysname='Linux', nodename='foundation5.ilt.example.com', release='3.10.0-514.el7.x86_64', version='#1 SMP Wed Oct 19 11:24:13 EDT 2016', machine='x86_64')
Linux
foundation5.ilt.example.com
3.系統的環境變量
import osprint(os.environ)
通過key值獲取環境變量對應的value值
import os
print(os.environ.get('PATH'))運行結果:
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin
4.判斷是否是絕對路徑
只會判斷路徑,并不會判斷目錄或者文件是否存在
import os
print(os.path.isabs('/tmp/ffff'))
print(os.path.isabs('hello.jog'))運行結果:
True
False
5.生成絕對路徑
import os
print(os.path.abspath('hello.png'))
print(os.path.join(os.path.abspath('.'),'hello.jpg'))
print(os.path.join('/home/kiosk','hello.jpg'))運行結果:
home/kiosk/PycharmProjects/20190523/hello.png
/home/kiosk/PycharmProjects/20190523/hello.jpg
/home/kiosk/hello.jpg
6.獲取目錄或文件名
import os
filename = '/home/dd/20190523/day06/hello.jpg'
print(os.path.basename(filename))
print(os.path.dirname(filename))運行結果:
hello.jpg
/home/dd/20190523/day06
7.創建和刪除目錄
os.mkdir()創建
os.makedirs()遞歸創建
os.rmdir()刪除
不能遞歸刪除目錄
8.創建文件 刪除文件
os.mknod()創建
os.remove()刪除
9.文件重命名
import osos.rename('data.txt','data1.txt')
10.判斷文件或目錄是否存在
import os
print(os.path.exists('ips.txtyyyy'))
11.分離后綴名和文件名
import os
print(os.path.splitext('hello.jpg'))運行結果:
('hello', '.jpg')
12.將目錄名和文件名分離
import os
print(os.path.split('/tmp/hello/hello.jpg'))運行結果:
('/tmp/hello', 'hello.jpg')
練習題:
1 . 在當前目錄新建目錄img, 里面包含多個文件, 文件名各不相同(X4G5.png)
import os
import random
import string
def str_name():"""生成文件名稱"""name_li = random.sample(string.ascii_letters+string.digits,4)return ''.join(name_li)+'.png'
def create_file():os.mkdir('img')name = {str_name() for i in range(100)}for k in name:filename = os.path.join('img', k)os.mknod(filename)
create_file()
2 . 將當前img目錄所有以.png結尾的后綴名改為.jpg
import os
def change(dirname,old_suffix,new_suffix):filename_li = [name for name in os.listdir(dirname) if name.endswith(old_suffix)]for filename in filename_li:oldname = os.path.join(dirname, filename)newname = os.path.join(dirname, os.path.splitext(filename)[0] + new_suffix)os.rename(oldname, newname)
change('img','.png','jpg')
時間模塊
python中時間表示的類型
1.時間戳:即從1970年1月1日到現在,單位是秒
import timeprint(time.time())運行結果:
1560407829.1201346
2.字符串時間
import timeprint(time.ctime())運行結果:
Thu Jun 13 14:37:59 2019
3.元組類型的時間
import timeprint(time.localtime())
info = time.localtime()
print(info.tm_year)
print(info.tm_mon)運行結果:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=13, tm_hour=14, tm_min=38, tm_sec=56, tm_wday=3, tm_yday=164, tm_isdst=0)
2019
6
文件的時間戳:
系統中文件存在三個時間戳:
atime:讀取一次文件的內容,該時間便會更新。比如對這個文件使用less命令或者more命令。(ls、stat這樣的命令不會修改文件訪問時間)
mtime:對文件內容修改一次便會更新該時間。例如使用vim等工具更改了文件內容并保存后,文件修改時間發生變化。通過ls –l列出的時間便是這個時間。要想看到文件訪問時間可使用ls –ul命令。
ctime:更改文件的屬性便會更新該時間,比如使用chmod命令更改文件屬性,或者執行其他命令時隱式的附帶更改了文件的屬性若文件大小等。
stat 文件名稱 #查看文件的時間戳
touch 文件名稱 #同時修改文件的三個時間戳
[kiosk@foundation5 Desktop]$ stat haha File: ‘haha’Size: 15168 Blocks: 32 IO Block: 4096 regular file
Device: 801h/2049d Inode: 137896031 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Access: 2019-06-13 08:52:55.289390893 +0800 ### atime
Modify: 2019-06-08 14:17:57.996665181 +0800 ### mtime
Change: 2019-06-08 14:17:58.043666378 +0800 ### ctimeBirth: -[kiosk@foundation5 Desktop]$ touch haha
[kiosk@foundation5 Desktop]$ stat haha File: ‘haha’Size: 15168 Blocks: 32 IO Block: 4096 regular file
Device: 801h/2049d Inode: 137896031 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ kiosk) Gid: ( 1000/ kiosk)
Access: 2019-06-13 14:46:28.080062542 +0800
Modify: 2019-06-13 14:46:28.080062542 +0800
Change: 2019-06-13 14:46:28.080062542 +0800 ## 三個時間戳全部更改Birth: -
常用的時間轉換:
1 . 把元組的時間轉換為時間戳
import time
tuple_time = time.localtime()
print(tuple_time)
print(time.mktime(tuple_time))
2 . 把元組時間轉換成字符串時間
import time
tuple_time = time.localtime()
print(time.strftime('%m-%d',tuple_time))
print(time.strftime('%Y-%m-%d',tuple_time))
print(time.strftime('%T',tuple_time))
print(time.strftime('%F',tuple_time))
3 . 將時間戳類型轉換成為字符串時間
import os
import time
pwd_time = os.path.getctime('/etc/passwd')
print('pwd_time',pwd_time)
print(time.ctime(pwd_time))
4 . 將時間戳轉換為元組
import os
import time
pwd_time = os.path.getctime('/etc/passwd')
tuple_time = time.localtime()
print(time.localtime(pwd_time))
5 . 將元組類型轉換為時間戳
import timetuple_time = time.localtime()
print(time.mktime(tuple_time))
示例:
1 . 根據指定的格式把一個時間字符串解析為時間元組
import times = '2019-6-6'
print(time.strptime(s,'%Y-%m-%d'))
s_time = '09:00:00'
print(time.strptime(s_time,'%H:%M:%S'))
2 . datetime
import os
from datetime import date
from datetime import datetime
from datetime import timedeltaprint(date.today())
print(datetime.now())
# 計算三天前的時間和三天后的時間
d = date.today()
delta = timedelta(days=31)
print(d + delta)
print(d - delta)# 計算兩個小時前的時間和兩個小時后的時間
now_hour = datetime.now()
delta = timedelta(hours=2)
print(now_hour - delta)
print(now_hour + delta)# 返回兩個時間,計算兩個時間之間的時間差
now_time = datetime.now()
print(now_time)
pwd_time = os.path.getmtime('/etc/passwd')
print(pwd_time)
pwd_time_obj = datetime.fromtimestamp(pwd_time)
print(pwd_time_obj)
delta = now_time - pwd_time_obj
print(delta)
需求:
1.獲取當前主機信息, 包含操作系統名, 主機名,
內核版本, 硬件架構等
2.獲取開機時間和開機時長;
3.獲取當前登陸用戶
import os
import psutil
from datetime import datetimeprint('主機信息'.center(50,'*'))
info = os.uname()
print("""操作系統:%s主機名稱:%s內核版本:%s硬件架構:%s"""%(info.sysname,info.nodename,info.release,info.machine)
)print('開機信息'.center(50,'*'))
boot_time = psutil.boot_time() #返回一個時間戳
# 將時間戳轉化為datetime類型的時間
boot_time_obj = datetime.fromtimestamp(boot_time)
#print(type(boot_time_obj))
now_time = datetime.now()
#print(now_time)
delta_time = datetime.now()
delta_time = now_time - boot_time_obj
#print(delta_time)
#print(type(delta_time))print('開機時間:',boot_time_obj)
# str是為了將時間對象轉換為字符串,實現分離
print('當前時間:',str(now_time).split('.')[0])
print('開機時長:',str(delta_time).split('.')[0])print('當前登陸用戶'.center(50,'*'))
login_user = psutil.users()
print(login_user)
# info = psutil.users()[0]
# print(info.name)