Python编程快速上手-保持时间、计划任务和启动程序
time模块
time.time()函数返回自那一刻以来的秒数
1 2 3 | >>> import time >>> time.time() 1651629220.041479 |
可以用于一段代码的运行时间计算

1 #!/usr/bin/env python 2 3 import time 4 def calcProd(): 5 # Calculate the product of the first 100,000 numbers. 6 product = 1 7 for i in range(1, 100000): 8 product = product * i 9 return product 10 11 startTime = time.time() 12 prod = calcProd() 13 endTime = time.time() 14 print('The result is %s digits long.' % (len(str(prod)))) 15 print('Took %s seconds to calculate.' % (endTime - startTime))

1 C:\PyProjects>C:/Python37/python3.exe c:/PyProjects/time.py 2 The result is 456569 digits long. 3 Took 5.874201059341431 seconds to calculate.
另一种剖析代码的方法时利用cProfile.run()函数,它提供详细的信息
time.sleep()函数,让程序暂停。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> import time >>> for i in range ( 3 ): ... print ( 'Tick' ) ... time.sleep( 1 ) ... print ( 'Tock' ) ... time.sleep( 1 ) ... Tick Tock Tick Tock Tick Tock >>> |
数字四舍五入
Python内置的round()函数,按照指定的精度四舍五入到一个浮点数。
1 2 3 4 5 6 7 8 9 10 11 | >>> import time >>> now = time.time() >>> now 1651631445.498358 >>> round (now, 2 ) 1651631445.5 >>> round (now, 4 ) 1651631445.4984 >>> round (now) 1651631445 >>> |
datetime模块
time模块用于取出Unix纪元时间戳,并加以处理。如果以更方便的格式显示日期,或对日期进行算数运算。就应该使用datetime模块。
1 2 3 4 5 6 7 8 | >>> import datetime >>> datetime.datetime.now() datetime.datetime( 2022 , 5 , 4 , 10 , 49 , 1 , 71253 ) >>> dt = datetime.datetime( 2022 , 5 , 4 , 10 , 49 , 1 ) >>> dt.year, dt.month, dt.day ( 2022 , 5 , 4 ) >>> dt.hour, dt.minute, dt.second ( 10 , 49 , 1 ) |
Unix纪元时间戳可以通过datetime.datetime.fromtimestamp(),转换为datetime对象。datetime对象的日期和时间将根据本地时区转换。
1 2 3 4 5 6 | >>> datetime.datetime.fromtimestamp( 1000000000 ) datetime.datetime( 2001 , 9 , 9 , 9 , 46 , 40 ) >>> >>> datetime.datetime.fromtimestamp(time.time()) datetime.datetime( 2022 , 5 , 4 , 10 , 53 , 1 , 574991 ) >>> |
datetime对象可以用比较操作符进行比较
1 2 3 4 5 6 7 8 9 10 | >>> halloween2015 = datetime.datetime( 2015 , 10 , 31 , 0 , 0 , 0 ) >>> newyears2016 = datetime.datetime( 2016 , 1 , 1 , 0 , 0 , 0 ) >>> oct31_2015 = datetime.datetime( 2015 , 10 , 31 , 0 , 0 , 0 ) >>> halloween2015 = = oct31_2015 True >>> newyears2016 > halloween2015 True >>> newyears2016 ! = oct31_2015 True >>> |
timedelta数据类型
datetime模块,提供了timedelta数据类型,它表示一段时间。而不是一个时刻。
1 2 3 4 5 6 7 8 | >>> delta = datetime.timedelta(days = 11 , hours = 10 , minutes = 9 , seconds = 8 ) >>> delta.days, delta.seconds, delta.microseconds ( 11 , 36548 , 0 ) >>> delta.total_seconds() 986948.0 >>> str (delta) '11 days, 10:09:08' >>> |
datetime.timedelta()函数接收关键性参数weeks、days、hours、minutes、seconds、milliseconds和microseconds,没有month和year关键字参数,因为"月" 和"年"时可变的时间,依赖于特定月份和年份。total_seconds() 方法返回只以秒表示的时间。
算术运算符可以用于对datetime值进行日期运算。
1 2 3 4 5 6 7 | >>> dt = datetime.datetime.now() >>> dt datetime.datetime( 2022 , 5 , 4 , 15 , 57 , 18 , 22181 ) >>> thousandDays = datetime.timedelta(days = 1000 ) >>> dt + thousandDays datetime.datetime( 2025 , 1 , 28 , 15 , 57 , 18 , 22181 ) >>> |
利用+和- 运算符,timedelta对象与datetime对象或其他timedelta对象相加或相减。利用*和/ 运算符,timedelta对象可以乘以或除以整数或浮点数。
1 2 3 4 5 6 7 8 9 | >>> oct21st = datetime.datetime( 2015 , 10 , 21 , 16 , 29 , 0 ) >>> aboutThirtyYears = datetime.timedelta(days = 365 * 30 ) >>> oct21st datetime.datetime( 2015 , 10 , 21 , 16 , 29 ) >>> oct21st - aboutThirtyYears datetime.datetime( 1985 , 10 , 28 , 16 , 29 ) >>> oct21st - ( 2 * aboutThirtyYears) datetime.datetime( 1955 , 11 , 5 , 16 , 29 ) >>> |
暂停直到特定日期
time.sleep()方法可以暂停程序若干秒。利用一个while循环,可以让程序暂停,直到一个特定日期。
1 2 3 4 5 6 | #!/usr/bin/env python import datetime import time halloween2016 = datetime.datetime( 2016 , 10 , 31 , 0 , 0 , 0 ) while datetime.datetime.now() < halloween2016: time.sleep( 1 ) |
将datetime对象转换为字符串
strftime()方法,将datetime对象显示为字符串 。
1 2 3 4 5 6 7 8 | >>> oct21st = datetime.datetime( 2015 , 10 , 21 , 16 , 29 , 0 ) >>> oct21st.strftime( '%Y/%m/%d %H:%M:%S' ) '2015/10/21 16:29:00' >>> oct21st.strftime( '%I:%M %p' ) '04:29 PM' >>> oct21st.strftime( "%B of %y" ) 'October of 15' >>> |
将字符串转换成datetime对象
datetime.datetime.strftime()函数:将字符串转换为datetime日期
datetime.datetime.strptime()函数:将格式字符串传入strptime(),解析为日期字符串
1 2 3 4 5 6 7 8 | >>> datetime.datetime.strptime( 'October 21, 2015' , '%B %d, %Y' ) datetime.datetime( 2015 , 10 , 21 , 0 , 0 ) >>> datetime.datetime.strptime( '2015/10/21 16:29:00' , '%Y/%m/%d %H:%M:%S' ) datetime.datetime( 2015 , 10 , 21 , 16 , 29 ) >>> datetime.datetime.strptime( "October of 15" , "%B of %y" ) datetime.datetime( 2015 , 10 , 1 , 0 , 0 ) >>> datetime.datetime.strptime( "November of 63" , "%B of %y" ) datetime.datetime( 2063 , 11 , 1 , 0 , 0 ) |
从Python启动其他程序
向Popen()传递命令行参数
利用内建的subprocess模块中的Popen()函数,Python程序可以启动计算机中的其他程序。
在Windows系统
1 2 3 | >>> import subprocess >>> subprocess.Popen( 'C:\\Windows\\System32\\calc.exe' ) <subprocess.Popen object at 0x000001C801C74BE0 > |
Ubuntu Linux系统
1 2 | >>> import subprocess >>> subprocess.Popen( '/usr/bin/gnome-calculator' ) |
1 | subprocess.Popen( 'C:\\Windows\\System32\\calc.exe' )返回值时一个Popen对象,它有两个方法:poll()和wait() |
1 2 3 4 5 6 7 | >>> calcProc = subprocess.Popen( 'C:\\Windows\\System32\\calc.exe' ) >>> calcProc.poll() = = None True >>> calcProc.wait() 0 >>> calcProc.poll() 0 |
向Popen()传递命令行参数
向Popen()传递一个列表,作为唯一的参数。该列表中的第一个字符串时要启动的程序的可执行文件名,所有后续的字符串将是该程序启动时,传递给该程序的命令行参数。实际上,这个列表将作为被启动程序的sys.argv的值。
1 2 3 | >>> subprocess.Popen([ 'C:\\Windows\\notepad.exe' , 'C:\\hello.txt' ]) <subprocess.Popen object at 0x000001C801C74DD8 > >>> |
运行其他Python脚本
向Popen传入一个列表,其中包含Python可执行文件的路径字符串,以及脚本文件名的字符串。
1 2 | >>> subprocess.Popen([ 'C:\\python37\\python3.exe' , 'C:\\PyProjects\\hello.py' ]) <subprocess.Popen object at 0x000001C801C74E80 > |
用默认的应用程序打开文件
1 2 3 4 5 6 | >>> import os >>> os.chdir( 'C:\\PyProjects' ) >>> fileObj = open ( 'hello.txt' , 'w' ) >>> fileObj.write( 'Hello world!' ) 12 >>> fileObj.close() |
每个操作系统都有一个程序,其行为等价于双击文档文件来打开它。根据操作系统,向Popen()传入(windows)'start'、(OS X)'open'或(Ubuntu Linux)'see'。
1 2 3 4 | >>> import subprocess >>> subprocess.Popen([ 'start' , 'hello.txt' ], shell = True ) <subprocess.Popen object at 0x000001C801C74EB8 > >>> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南