python—os模块、时间模块

2022-09-15 09:48:50

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 os

info = 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 os

print(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 os
 os.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 time

print(time.time())

运行结果:
1560407829.1201346

2.字符串时间

import time

print(time.ctime())

运行结果:
Thu Jun 13 14:37:59 2019

3.元组类型的时间

import time

print(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        ### ctime
 Birth: -

[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 time

tuple_time = time.localtime()
print(time.mktime(tuple_time))

示例:
1 . 根据指定的格式把一个时间字符串解析为时间元组

import time

s = '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 timedelta


print(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 datetime

print('主机信息'.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)
  • 作者:z228059
  • 原文链接:https://blog.csdn.net/z228059/article/details/91863838
    更新时间:2022-09-15 09:48:50