Python编程快速上手-保持时间、计划任务和启动程序

time模块

  time.time()函数返回自那一刻以来的秒数

>>> 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))
calcProd.py
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()函数,让程序暂停。

>>> 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()函数,按照指定的精度四舍五入到一个浮点数。

>>> 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模块。

>>> 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对象的日期和时间将根据本地时区转换。

>>> 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对象可以用比较操作符进行比较

>>> 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数据类型,它表示一段时间。而不是一个时刻。

>>> 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值进行日期运算。

>>> 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对象可以乘以或除以整数或浮点数。

>>> 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循环,可以让程序暂停,直到一个特定日期。

#!/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对象显示为字符串 。

>>> 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(),解析为日期字符串

>>> 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系统

>>> import subprocess
>>> subprocess.Popen('C:\\Windows\\System32\\calc.exe')
<subprocess.Popen object at 0x000001C801C74BE0>

  Ubuntu Linux系统

>>> import subprocess
>>> subprocess.Popen('/usr/bin/gnome-calculator')
 subprocess.Popen('C:\\Windows\\System32\\calc.exe')返回值时一个Popen对象,它有两个方法:poll()和wait()
>>> calcProc = subprocess.Popen('C:\\Windows\\System32\\calc.exe')
>>> calcProc.poll() == None
True
>>> calcProc.wait()
0
>>> calcProc.poll()
0

向Popen()传递命令行参数

  向Popen()传递一个列表,作为唯一的参数。该列表中的第一个字符串时要启动的程序的可执行文件名,所有后续的字符串将是该程序启动时,传递给该程序的命令行参数。实际上,这个列表将作为被启动程序的sys.argv的值。

>>> subprocess.Popen(['C:\\Windows\\notepad.exe', 'C:\\hello.txt'])
<subprocess.Popen object at 0x000001C801C74DD8>
>>>

运行其他Python脚本

  向Popen传入一个列表,其中包含Python可执行文件的路径字符串,以及脚本文件名的字符串。

>>> subprocess.Popen(['C:\\python37\\python3.exe', 'C:\\PyProjects\\hello.py'])
<subprocess.Popen object at 0x000001C801C74E80>

用默认的应用程序打开文件

>>> 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'。

>>> import subprocess
>>> subprocess.Popen(['start', 'hello.txt'], shell=True)
<subprocess.Popen object at 0x000001C801C74EB8>
>>>

 

posted on 2022-05-04 11:04  HelonTian  阅读(137)  评论(0编辑  收藏  举报