2

os模块

os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件、目录打交道,所以离不了os模块

常用os命令

os.name

name顾名思义就是'名字',这里的名字是指操作系统的名字,主要作用是判断目前正在使用的平台,并给出操作系统的名字,如Windows 返回 'nt'; Linux 返回'posix'。注意该命令不带括号。

os.getcwd()

全称应该是'get current work directory',获取当前工作的目录,如:返回结果为:''E:\python资料\python-teavh\day17''。注意该命令带括号,除了第一个命令不带括号之外,以下命令基本都带括号。

os.listdir(path)

列出path目录下所有的文件和目录名。以列表的形式全部列举出来,其中没有区分目录和文件。

>>import os
>>os.listdir()
['.idea', '01_os模块补充.py', '02_time模块详解.py', '03_datetime模块详解.py', '04_应用案例_系统监控.py', '05_namedtupled新型数据类型.py', '06_python与Excel.py', '07_excel需求.py', '08_今日作业_批量更新商品价格.py', '09_json模块.py', '10_获取IP对应的地理位置.py', 'Book1.xlsx', 'date.txt', 'Excel应用参考', 'json.txt', 'produceSales.xlsx']

os.path命令

  • os.path.isfile(path)——判断指定对象是否为文件。是返回True,否则False
  • os.path.isdir(path)——判断指定对象是否为目录。是True,否则False
  • os.path.exists(path)——检验指定的对象是否存在。是True,否则False
  • os.path.split(path)——返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体。此处只是把前后两部分分开而已。就是找最后一个'/'。
  • os.path.abspath()——获得绝对路径
  • os.path.basename(path)——返回文件名

os模块示例

查看文件修改日期

#查看D:/python_need/data文件的修改日期
#并保存到当前目录下的'date.txt'文件中
import os
import time
import codecs
filename = 'D:\\python_need\\data.txt'
ctime = os.path.getctime(filename)  #输出时间戳:1536580746.5799537
tuple_time = time.localtime(ctime)  #将时间戳变成元组时间,time.struct_time(tm_year=2018, tm_mon=9, tm_mday=10, tm_hour=19, tm_min=59, tm_sec=6, tm_wday=0, tm_yday=253, tm_isdst=0)

year = tuple_time.tm_year
month = tuple_time.tm_mon
day = tuple_time.tm_mday

with codecs.open('date.txt','w','utf-8') as f:  #打开方式一定要使用codecs.open(),否则中文字符会乱码
    f.write("%s的修改日期是%s年%s月%s日" %(filename,year,month,day))

图片描述

time模块

在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
UTC(Coordinated Universal Time)即格林威治天文时间,为世界标准时间。中国北京为UTC+8。
DST(Daylight Saving Time)即夏令时。

时间格式

时间戳(timestamp)的方式:通常来说,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。

>>import time
>>time.time()
1536645999.1539526

元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
元组时间元素如下:
图片描述

>>import time
>>time.localtime()
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=11, tm_hour=14, tm_min=7, tm_sec=31, tm_wday=1, tm_yday=254, tm_isdst=0)

字符串时间

>>import time
>>time.ctime
'Tue Sep 11 14:04:52 2018'

时间格式的相互转换

图片描述

import time
str_time = time.ctime()#Tue Sep 11 14:10:43 2018
tuple_time = time.localtime()#time.struct_time(tm_year=2018, tm_mon=9, tm_mday=11, tm_hour=14, tm_min=11, tm_sec=27, tm_wday=1, tm_yday=254, tm_isdst=0)
timestamp = time.time()#1536646330.1479473

#把元组时间转换成时间戳
print(time.mktime(tuple_time))

#把元组时间转换成字符串时间
# strftime(format[, tuple]) -> string
print(time.strftime('%Y-%m-%d-%H-%M-%S'))#指定格式

#把字符串时间转换成元组时间
print(time.strptime('2018-9-10','%Y-%m-%d'))#指定格式

图片描述

datetime模块

time模块主要用于时间访问和转换,这个模块提供了各种与时间相关的函数。但不是所有方法在任意平台中有效。
datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。
datetime模块中定义的类
图片描述

from datetime import time
from datetime import datetime
from datetime import timedelta
today_time = datetime.today() #获取当前本区时间,并以字符串格式显示2018-09-11 15:04:25.317120
now_time = datetime.now()  #返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上
delta = timedelta(days=3)   #增减或减少一个delta
print(now_time-delta)   #返回三天前的时间,2018-09-08 15:07:11.904546

图片描述

综合应用

实现对系统的监控

#   1. 获取当前主机信息, 包含操作系统名, 主机名, 内核版本, 硬件架构等
#   2. 获取开机时间和开机时长
#   3. 获取当前登陆用户

#win下没有os.uname()用法
#解决方案,使用platform.uname()
import platform
import time

import psutil
import datetime

info =platform.uname()  #uname_result(system='Windows', node='DESKTOP-EN0LQJH', release='10', version='10.0.16299', machine='AMD64', processor='Intel64 Family 6 Model 142 Stepping 10, GenuineIntel')

print("1. 主机信息".center(50, '*'))
print("""
    操作系统: %s, 
    主机名: %s, 
    内核版本: %s, 
    硬件架构: %s
""" %(info.system, info.node, info.release, info.machine))

print("2. 开机时间".center(50, '*'))
boot_time = psutil.boot_time()  #时间戳,1536040894.0
#datetime对象,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]
#fromtimestamp,根据指定的时间戳创建一个datetime对象
boot_time = datetime.datetime.fromtimestamp(boot_time)  #2018-09-04 14:01:34
now_time = datetime.datetime.now()  #同一类型
delta_time = now_time-boot_time #获取时间差
delta_time = str(delta_time).split('.')[0]
print("""
    开机时间: %s
    当前时间: %s
    开机时长: %s
""" %(boot_time,now_time, delta_time))

print("3. 当前登陆用户".center(50, '*'))

# 获取当前登陆用户的详细信息, 需求是获取用户名和登陆主机
users = psutil.users()  #[suser(name='Sheen_Star', terminal=None, host='0.4.0.0', started=1536585663.0, pid=None)]
users = {"%s %s" %(user.name, user.host) for user in users} #集合实现数据去重
for user in users:
    print("\t当前登录用户有: %s" %(user))

图片描述


SheenStar
168 声望26 粉丝

祝你坚强