开始Python -- 标准库(1)

来源:互联网 发布:杰视帮和凤凰美工 编辑:程序博客网 时间:2024/06/03 03:03

Python自带很多模块,这里描述一些常用的模块(标准库)中的重要函数和变量。

1sys模块

1argv

l         命令行参数List,包括Python脚本名(sys.argv[0]

2exit([arg])

l         退出当前程序(具有UNIX风格);可以指定一个整数来表明程序执行结果,或者指定一个字符串来提供错误信息或执行结果信息

3modules

l         模块名映射到实际模块的Dictionary。下面是输出已导入的模块名List的例子:

>>> import sys, pprint

>>> pprint.pprint([key for key in sys.modules.keys() if key[0] != '_' and sys.modules.get(key) != None])

4path

l         导入模块时,Python查找模块的路径List

5platform

l         Python运行平台的简名String

6stdin/stdout/stderr

l         标准输入流/输出流/错误流,类文件对象

 

2os模块

1environ

l         映射操作系统环境变量的Dictionary,可以用于改变环境变量的值。但不是所有的平台都支持。

2system(command)

l         执行操作系统命令(外部程序),下面是打开firfox浏览器的例子:

>>> import os

>>> os.system(r'"C:/Program Files/Mozilla Firefox/firefox.exe"')

l         由于目录名中间有空格,所以必须用引号将路径引起来;另外,在启动外部程序运行时,Python将控制权交给外部程序,自身处于等待状态,直到外部程序运行结束后交还控制权。

l         Windows平台有个更好用的函数startfile()

os.startfile(r'c:/Program Files/Mozilla Firefox/firefox.exe')

l         这里路径不需要用引号引起来,即使路径中有空白字符;并且Python会在新的Shell中执行外部程序,自身不会处于等待状态,可以直接运行后续脚本。

3sep

l         路径名字间分割符

4pathsep

l         多路经(例如环境变量PYTHONPATH)的路径之间的分割符

5linesep

l         文本文件中行分割符

 

3fileinput模块

fileinput模块使你能够方便的遍历一系列文本文件的所有行。脚本运行时,文本文件作为命令行参数指定,如果不指定默认为标准输入(sys.stdin)。

1input([files[, inplace[, backup]])

l         返回一个用于遍历多输入流的所有行的对象

l         可以设置files参数来指定多个文件名的Sequence

l         可以设置inplace=True,进行替换处理

l         可以设置backup参数指定文件扩展名,以便在进行替换处理时创建备份文件

2filename()

l         返回当前处理的文件名

3lineno()

l         返回当前行数,这是累计的行数(从1开始)

4filelineno()

l         返回当前文件中的行数(从1开始)

5isfirstline()

l         如果是当前文件的第一行返回True,否则返回False

6isstdin()

l         如果是当前文件是sys.stdin返回True,否则返回False

7nextfile()

l         关闭当前文件,跳到下一个文件;跳过的行数不计算在lineno()

8close()

l         关闭整个文件链,结束遍历

l         下面是给文件添加行号的简单例子:

# numberlines.py

import fileinput

for line in fileinput.input(inplace=True):

    line = line.rstrip()

    num = fileinput.filelineno()

    print '%-40s # %2i' % (line, num)

 

4time模块

time模块用于日期和时间的维护,以及字符串和日期之间的转换。

1)日期表示形式

l         以秒为单位的浮点数

l         包含9个整数的日期Tuple,例如:(2009, 3, 4, 17, 16, 7, 2, 63, 0)

l         日期Tuple的字段说明如下:

索引     字段    

0               4位,YYYY

1               1–12

2               1–31

3        小时     0–23

4        分钟     0–59

5               0–61(包括闰秒和双闰秒)

6        星期     0–6,星期一是0

7        公历日   1–366

8        夏令时   0, 1, or –1(布尔值)

2localtime([secs])

l         将秒数转换为日期Tuple(本地日期)

l         如果不提供参数或为None,则使用当前时间

3mktime(tuple)

l         localtime()函数相反,将日期Tuple转换为秒数(本地日期)

4sleep(secs)

l         使程序挂起指定的秒数再执行

5strftime(format[, tuple])

l         将日期Tuple转换为指定格式的日期字符串

l         常用的格式指令如下:

指令     含义

%d       月的天数[01,31]

%H       小时[00,23]

%m       [01,12]

%M       分钟[00,59]

%S       [00,61] (包括闰秒和双闰秒)

%Y       4位年

%%       %字符

6strptime( string[, format])

l         strftime()函数相反,将指定格式的日期字符串转换为日期Tuple;格式指令和strftime()函数使用的相同

7)日期计算

l         下面是日期字符串进行日期计算的工具类:

#DateTimeUtils.py

import time

import datetime

 

# DateTime String Utilities

class DateTimeUtils:

    @staticmethod

    def addDay(str, format, n):

        timeTuple = time.strptime(str, format)

        oldDate = datetime.date(timeTuple[0], timeTuple[1], timeTuple[2])

        newDate = oldDate + datetime.timedelta(days=n)

        return time.strftime(format, newDate.timetuple())

l         这里使用了datetime模块提供的datetimedelta对象,用来支持日期的计算

l         timedelta对象表示2个日期之间的时间期间

l         addDay()函数的处理过程如下:

Ø         将日期字符串转换为日期Tuple

Ø         根据日期Tuple创建datetime.date对象

Ø         使用datetime.timedelta对象,在当前日期基础上加指定日数(可以为负数)

Ø         将计算后的日期转换为日期字符串

l         下面是一些执行的结果:

>>> from DateTimeUtils import DateTimeUtils

>>> print DateTimeUtils.addDay('20090301', '%Y%m%d', -2)

'20090227'

>>> DateTimeUtils.addDay('2009-03-05', '%Y-%m-%d', 7)

'2009-03-12'

 

5random模块

random模块用来产生各种随机数。下面是些常用的函数:

1random()

l         返回0-1之间的浮点数(0<n<1)

2uniform(a, b)

l         返回a-b之间的浮点数(a<n<b)

3randrange([start], stop, [step])

l         使用相同参数调用range()函数,返回一个随机整数

4choice(seq)

l         从指定Sequence中返回一个元素

5shuffle(seq[, random])

l         对指定Sequence中的元素顺序进行洗牌

6sample(seq, n)

l         从指定Sequence中返回n个不同的元素

7)下面是随机抽取纸牌的例子:

#cards.py

from random import shuffle

from random import choice

values = range(2, 11) + 'Jack Queen King A'.split()

suits = 'diamonds clubs hearts spades'.split()

deck = ['%s of %s' % (v, s) for v in values for s in suits]

shuffle(deck)

while deck:

    randomCard = choice(deck)

    print randomCard

    deck.remove(randomCard)