python标准库实例详解八

发布时间:2019-07-31编辑:脚本学堂
本节是python标准库实例教程的第八节,学习下python模块sys、string、time等的用法,有需要的朋友参考下。

本节内容:
pythonbiaozhunku/ target=_blank class=infotextkey>python标准库中模块sys、string、time等的用法。

使用sys重定向输出
 

复制代码 代码示例:
import sys
import string
 
class Redirect:
 
    def _ _init_ _(self, stdout):
        self.stdout = stdout
 
    def write(self, s):
        self.stdout.write(string.lower(s))
 
# redirect standard output (including the print statement)
# 重定向标准输出(包括print语句)
old_stdout = sys.stdout
sys.stdout = Redirect(sys.stdout)
 
print "HEJA SVERIGE",
print "FRISKT HUM303226R"
 
# restore standard output
# 恢复标准输出
sys.stdout = old_stdout
 
print "M303205303205303205303205L!"
 
heja sverige friskt hum303266r
M303205303205303205303205L!
 

使用sys模块退出程序
 

复制代码 代码示例:
import sys
 
print "hello"
 
sys.exit(1)
 
print "there"
 
hello

注意 sys.exit 并不是立即退出. 而是引发一个 SystemExit 异常. 这意味着你可以在主程序中捕获对 sys.exit 的调用
捕获sys.exit调用
 

复制代码 代码示例:
import sys
 
print "hello"
 
try:
    sys.exit(1)
except SystemExit:
    pass
 
print "there"
 
hello
there

如果准备在退出前自己清理一些东西(比如删除临时文件), 你可以配置一个 "退出处理函数"(exit handler), 它将在程序退出的时候自动被调用
另一种捕获sys.exit调用的方法
 

复制代码 代码示例:
import sys
 
def exitfunc():
    print "world"
 
sys.exitfunc = exitfunc
 
print "hello"
sys.exit(1)
print "there" # never printed # 不会被 print
 
hello
world

在 Python 2.0 以后, 你可以使用 atexit 模块来注册多个退出处理函数.
atexit 模块允许你注册一个或多个终止函数(暂且这么叫), 这些函数将在解释器终止前被自动调用.
调用 register 函数, 便可以将函数注册为终止函数,你也可以添加更多的参数, 这些将作为 exit 函数的参数传递.
使用 atexit 模块
 

复制代码 代码示例:
import atexit
 
def exit(*args):
    print "exit", args
 
# register two exit handler
atexit.register(exit)
atexit.register(exit, 1)
atexit.register(exit, "hello", "world")
 
exit ('hello', 'world')
exit (1,)
exit ()
 

time 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装.
给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 到现在经过的秒数. 即 Unix 格式), 或者一个表示时间的 struct (类元组).
使用 time 模块获取当前时间
 

复制代码 代码示例:
import time
 
now = time.time()
 
print now, "seconds since", time.gmtime(0)[:6]
print
print "or in other words:"
print "- local time:", time.localtime(now)
print "- utc:", time.gmtime(now)
 
937758359.77 seconds since (1970, 1, 1, 0, 0, 0)
 
or in other words:
- local time: (1999, 9, 19, 18, 25, 59, 6, 262, 1)
- utc: (1999, 9, 19, 16, 25, 59, 6, 262, 0)
 

使用 time 模块格式化时间输出
 

复制代码 代码示例:
import time
 
now = time.localtime(time.time())
 
print time.asctime(now)
print time.strftime("%y/%m/%d %H:%M", now)
print time.strftime("%a %b %d", now)
print time.strftime("%c", now)
print time.strftime("%I %p", now)
print time.strftime("%Y-%m-%d %H:%M:%S %Z", now)
 
# do it by hand...
year, month, day, hour, minute, second, weekday, yearday, daylight = now
print "%04d-%02d-%02d" % (year, month, day)
print "%02d:%02d:%02d" % (hour, minute, second)
print ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")[weekday], yearday
 
Sun Oct 10 21:39:24 1999
99/10/10 21:39
Sun Oct 10
Sun Oct 10 21:39:24 1999
09 PM
1999-10-10 21:39:24 CEST
1999-10-10
21:39:24
SUN 283

在一些平台上, time 模块包含了 strptime 函数, 它的作用与 strftime 相反. 给定一个字符串和模式, 它返回相应的时间对象
使用 time.strptime 函数解析时间
 

复制代码 代码示例:
import time
 
# make sure we have a strptime function!
# 确认有函数 strptime
try:
    strptime = time.strptime
except AttributeError:
    from strptime import strptime
 
print strptime("31 Nov 00", "%d %b %y")
print strptime("1 Jan 70 1:30pm", "%d %b %y %I:%M%p")