Python模块之os、sys、time、datetime中的一些方法

本人不喜欢,拐外抹角,直奔主题。但是另外说一嘴,要是用哪个模块大前提你需要先导入此模块

os模块

和文件相关操作-重命名、删除

以下内容都需要加上’ ’ 一对单引号给引起来,以字符串的形式进行

os.remove('a.txt')#删除文件
os.rename('a.txt','b.txt')#更改文件名
os.removedirs('a')#删除没有内容的目录
shutil.retree('a')#删除有内容的目录

os.remove() 删除文件,括号中输入文件名必须要加引号,当然如果是和你这个编写的文件同级的目录下,只写入文件名就好,但是不是在同一级,需要加入该文件的目录

os.rename()更改文件名,第一项是你需要修改的文件名,然后‘’,”(逗号隔开)输入第二项修改后的名字,如果和你正在编写的不属于同一个目录的话,参照os.remove()中的方法

os.removedirs()删除文件夹,直接填入你的文件夹名称就好,如果和你编写的文件不属于同一个目录,请参照os.remove()中的方法,有内容则会失败,有内容失败这怎么办呢?我就想删除有内容的文件夹,这就涉及到shutil模块,首先还是要导入,然后使用进行删除,前提是要和你编写这个程序在同一级目录中

和路径相关的操作,这得使用另一个子模块os.path 下面的几个函数不会判断你传入的正确与否

获取文件路径

res =os.path.dirname(r'd:/aaa/ann/cc/a.txt')
#os.path.dirname()里面填写文件路径和文件,声明一个变量来接收你需要的目录,如果没有该路径,也不会报错

获取文件名

res =os.path.split(r'd:/aaa/ann/cc/a.txt')
#os.path.basename()里面填写文件路径和文件,
#声明一个变量来接受你的需要的路径和文件名,如果没有该路径,也不会报错,结果会以元组返回

把路径中的路径名和文件名分开,结果为元祖

res =os.path.split(r'd:/aaa/ann/cc/a.txt')
#os.path.basename()里面填写文件路径和文件,声明一个变量来接受你的需要的路径和文件名,如果没有该路径,也不会报错,结果会以元组返回

拼接路径

path = os.path.join('d:\\','aa','bbb','ccc','a.txt')
#os.path.join()将你传入路径拼接为一个完整的路径返回给你

判断

os.path.isdir('d:/a.txt') #判断这个路径是否存在,存在返回Ture,否则为False
os.path.isfile('d:/aaa.txt')#判断该路径下的文件是否存在,存在返回True,否则为False

sys模块

和Python解释器相关操作

获取命令行运行方式的脚本后面的参数
使用sus.argv[]方法,例如:

print(sys.argv[0])#打印脚本名
print(sys.argv[1])#打印第一个参数
print(sys.argv[2])#打印第二各参数

返回已经加载的模块

sys.modules()
print(sys.modules)#打印已经加载的模块

time模块

获取时间戳

time.time()

print(time.time())打印出从时间元年19700:0:0 到现在的秒数

通过时间戳获取时间字符串

时间字符串是由九个字段组成:分别为tm_ year(年),tm_mon(月),tm_mday(日),tm_hour(时),tm_min(分 ), tm_sec (秒),tm_wday(星期,0表示周一),tm_yday(一年中的第几天).tm_isds(是否是夏令时,默认为值为1的话夏令时)
time.localtime() 默认参数为系统时间的时间戳
print(time.localtime()) #打印出时间字符串如:time.struct_time(tm_year=2020, tm_mon=4, tm_mday=3, tm_hour=1, tm_min=37, tm_sec=18, tm_wday=4, tm_yday=94, tm_isdst=0)

因为有了时间字符串,即使输出出来也不便阅读,那就格式化字符串

time.strtime()
time.strtime("%Y年%m月%d天 %H时%M分%S") 一般需求只需要年月日时分秒就可以了,所以格式化就写到这,如果需求不止这么多,当然你可以去阅读官方文档,或者小窗.
格式化时间对象和字符串之间的转换

times = time.strftime("%Y年%m月%d日 %H:%M:%S")
print(s) #2020年04月03日01时34分01秒

time.strptime()
将时间字符串转换出时间字符串,不写的参数都会有默认值,如tm_hour=0, tm_min=0, tm_sec=0等

tim_obj= time.strptime('2010 10 20','%Y %m %d')
print(tim_obj) #会返回一个时间字符串如:time.struct_time(tm_year=2010, tm_mon=10, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=293, tm_isdst=-1)

时间对象转化成时间戳

time.mktime()
将时间对象转化成时间戳,和实际的时间戳所差无极,如果需求不大可以直接相等

t1= time.localtime()#时间对象
t2 =time.mktime(time.localtime())
print(t2) #1585849488.0 时间对象返回的时间戳
print(time.time()) #1585849488.1305354  直接调用时间戳

暂停当前程序,睡眠x秒

time.sleep()
暂停一下程序,参数为你需要暂停的秒数

datetime模块

date类:

datetime.date()
将传入的参数拼接为x-y-z参数为 年,月,日 中间用英文逗号隔开

d =datetime.date(2010,10,10)
print(d) #2010-10-10
#获取date对象的各个属性
print(d.year) #年 2010
print(d.month) #月 10
print(d.day) #日 10

time类:

datetime.time()
将传入的参数拼接为xx:yy:zz参数为时,分,秒中间用英文逗号隔开

t = datetime.time(10,48,59)
print(t) #10:48:59
time类的属性
print(t.hour) #时 10
print(t.minute)#分 48
print(t.second)#秒 59

datetime类:

datetime.datetime()
这个就是综合了前面两个类,也包括他们的方法。年、月、日、时、分、秒这家伙都包括了,传的参数也是两个类中所有的参数,一个不多也一个不少。

dt = datetime.datetime(2011,11,11,11,11,11)
print(dt) #2011-11-11 11:11:11

调用这个类的方法笔者在这里就不介绍了,和上面两个方法一样。

到这里就有人会问datetime模块都可以实现的时间的功能为啥还需要time模块呢?

本质上datetime模块,主要用于数学计算,而不是用于显示时间,你不信?那就继续看

时间变化量

datetime.timedelta
指定时间变化量,参数可以为年月日时分秒 但是格式如days=1。

td = datetime.timedelta(days=1) #指定时间变化量为一天
d = datetime.date(2010,10,10)
res = d+td #把时间变化量加到设定时间上
print(res) #2010-10-11

时间变化量的计算是否会产生进位?

t = datetime.datetime(2010,10,10,10,10,59) #设定时间
td = datetime.timedelta(seconds = 3)#设定时间变化量为3秒
res = t+td #把时间变化量加到设定时间上
print(res) #2010-10-10 10:11:02

结论:会产生进位,偷偷在告诉你一句时间变化量只能和这三类进行数学运算 date,datetime,timedelta

下面就用datatime模块做个小练习

###求某一个年份的二月的天数
第一种解法,先求出输入的年份是不是闰年,然后是就是多少天,不是又是多少天
第一种解法的代码就不在这里显示了,因为咱们主要以解法一来衬托解法二的优点

解法二:根据输入的年份创建该年份的3月1号,创建一天的时间段,最后进行相减,最后调出day方法并输出

import datetime
#用datetime

# 首次创建制定年份的3月1号,然后让它往前走一天
year = int(input('输入年份'))
#创建制定年份的date对象
d= datetime.date(year,3,1)
#创建一天的时间段
td = datetime.timedelta(days=1)
res = d-td
print(res.day)

和时间段进行运算的结果类型是什么类型?

来检验一下

d=datetime.datetime(2010,10,20)
td = datetime.timedelta(days = 1)
res = d+td
print(type(res)) #<class 'datetime.datetime'>

根据检验结果可知:结果类型和另一个操作数保持是一致的

如有错误,还请读者指出,欢迎评论席评论与交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据_小花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值