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)