查看pytho中已自带的模块

显示出已导入的模块

import sys

sys.modules

显示全部模块

help()

modules

查看某模块中支持的功能

eg:

dir('os')

查看某模块的功能的用法

eg:

help(os.mkdir)


自定义模块的导入

在/usr/lib64/python2.6/site-packages/路径下创建自己的模板以.pth后缀(mymodule.pth ),然后在里面写上自己的路径即可



1、模块__future__

至少确保在2.1之前版本的Python可以正常运行一些新的语言特性


2、模块re

Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

举一个简单的例子,在寻找一个字符串中所有的英文字符:

group() 返回RE匹配到的子串
 start() 返回匹配开始的位置
 end() 返回匹配结束的位置
 span() 返回一个元组包含匹配 (开始,结束) 的位置
 
 import re
pattern = re.compile(r'[a-zA-Z]')  //r 原始字符
result = pattern.findall('as3SiOPdj#@23awe')   //findall 返回字符串行表
print result
# ['a', 's', 'S', 'i', 'O', 'P', 'd', 'j', 'a', 'w', 'e']

re.match  
pattern.match('').
从0开始匹配
 
re.search   任意位置开始匹配
pattern.search('::: message') 
 >>> m.group()
 'message'
 
 groups 方法返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
 eg:
 #!python
 >>> p = re.compile('(a(b)c)d')
 >>> m = p.match('abcd')
 >>> m.group(0)
 'abcd'
 >>> m.group(1)
 'abc'
 >>> m.group(2)
 'b'
  >>> m.groups()  //
 ('abc', 'b')
 
sub(replacement, string[, count = 0])
提供一个替换值,可以是字符串或一个函数,和一个要被处理的字符串
参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配
eg:
>>> p = re.compile( '(blue|white|red)')
 >>> p.sub( 'colour', 'blue socks and red shoes')
 'colour socks and colour shoes'
 >>> p.sub( 'colour', 'blue socks and red shoes', count=1)
 'colour socks and red shoes'
 
3、模块shlex
在Python中,可以shlex.split()分割字符串,只保留双引号?例如,如果输入的是"hello, world" is what 'i say'那么输出将是["hello, world", "is", "what", "'i", "say'"]。


4.format

格式化(format())输出字符串

print('{0} is {1} years old. '.format(name, age)) #输出参数  


5、startswith

Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

语法:

startswith()方法语法:

    str.startswith(str,beg=0,end=len(string));

  • 参数:

  • str -- 检测的字符串。

  • strbeg -- 可选参数用于设置字符串检测的起始位置。

  • strend -- 可选参数用于设置字符串检测的结束位置。


6、open

   os.open(file,flags[,mode]);


'r' : 以只读模式打开

'r+' : 以读写模式打开, 写的指针刚开始指在文件开头, 因此会覆写文件

'w' : 清空文件, 不能使用 .read*() 方法.  (read(), readline(), readlines())

'w+' : 清空文件, 可以使用 .read*() 方法. 

'a' : 向一个文件追加内容,  不能使用 .read*()

'a+' : 向一个文件追加内容, 可以使用 .read*()

'rU' : 自动探测行尾符, 如果以这种模式打开一个文件, 该文件对象将获得一个 newlines 属性, 当还未读到任何行尾时, .newlines 属性等于 None, 读到了则可能是'\n', '\r\n', '\r' 中的一种. 


7、path

os.path模块主要用于文件的属性获取


1).os.path.abspath(path) 
返回path规范化的绝对路径。 

2).os.path.split(path) 
将path分割成目录和文件名二元组返回。 
 
3).os.path.dirname(path) 
返回path的目录。其实就是os.path.split(path)的第一个元素。 
 
4).os.path.basename(path) 
返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素。 
 

#!/usr/bin/python

import os

path=os.path.realpath(__file__)

dirname=os.path.dirname(path)

basename=os.path.basename(path)

splitext=os.path.splitext(basename)[0]

split=os.path.split(path)

print  path

print dirname

print basename

print splitext

print split

==========================

/root/bin/pya.py

/root/bin

pya.py

pya

('/root/bin', 'pya.py')


5).os.path.commonprefix(list) 
返回list中,所有path共有的最长的路径。 
如: 
>>> os.path.commonprefix(['/home/td','/home/td/ff','/home/td/fff']) 
'/home/td' 
 
6).os.path.exists(path) 
如果path存在,返回True;如果path不存在,返回False。 
 
7).os.path.isabs(path) 
如果path是绝对路径,返回True。 
 
8).os.path.isfile(path) 
如果path是一个存在的文件,返回True。否则返回False。 

9).os.path.isdir(path) 
如果path是一个存在的目录,则返回True。否则返回False。 
 
10).os.path.join(path1[, path2[, ...]]) 
将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。 
 
11).os.path.normcase(path) 
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。 
 
>>> os.path.normcase('c:/windows\\system32\\') 
'c:\\windows\\system32\\' 
 
12).os.path.normpath(path) 
规范化路径。 
 
>>> os.path.normpath('c://windows\\System32\\../Temp/') 
'c:\\windows\\Temp' 
 
13).os.path.splitdrive(path) 
返回(drivername,fpath)元组 
 
>>> os.path.splitdrive('c:\\windows') 
('c:', '\\windows') 
 
14).os.path.splitext(path) 
分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作 
 
>>> os.path.splitext('c:\\csv\\test.csv') 
('c:\\csv\\test', '.csv') 
 
15).os.path.getsize(path) 
返回path的文件的大小(字节)。 
 
>>> os.path.getsize('c:\\boot.ini') 
299L 
 
16.os.path.getatime(path) 
返回path所指向的文件或者目录的最后存取时间。 
 
17).os.path.getmtime(path) 
返回path所指向的文件或者目录的最后修改时间


18).os.path.sep:路径分隔符      linux下就用这个了’/’


8、isinstance

isinstance(object, classinfo)

isinstance(object, class-or-type-or-tuple)

如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False

>>> isinstance(1, int)

True

>>> isinstance(1.0, float)

True


9、json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

对简单数据类型的encoding 和 decoding

使用简单的json.dumps方法对简单数据类型进行编码,例如:


import  json
 
obj =  [[ 1 , 2 , 3 ], 123 , 123.123 , 'abc' ,{ 'key1' :( 1 , 2 , 3 ), 'key2' :( 4 , 5 , 6 )}]
encodedjson =  json.dumps(obj)
print  repr (obj)
print  encodedjson

输出:

[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}] 
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]

通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:

python模块_第1张图片
json.dumps()方法返回了一个str对象encodedjson,我们接下来在对encodedjson进行decode,得到原始数据,需要使用的json.loads()函数:

decodejson =  json.loads(encodedjson)
print  type (decodejson)
print  decodejson[ 4 ][ 'key1' ]
print  decodejson

输出:

 
[1, 2, 3]

[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]

loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘abc’转化为了unicode类型。从json到python的类型转化对照如下:

python模块_第2张图片

json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separators,indent等参数。

排序功能使得存储的数据更加有利于观察,也使得对json输出的对象进行比较,例如:

data1 =  { 'b' : 789 , 'c' : 456 , 'a' : 123 }
data2 =  { 'a' : 123 , 'b' : 789 , 'c' : 456 }
d1 =  json.dumps(data1,sort_keys = True )
d2 =  json.dumps(data2)
d3 =  json.dumps(data2,sort_keys = True )
print  d1
print  d2
print  d3
print  d1 = = d2
print  d1 = = d3

输出:

{"a": 123, "b": 789, "c": 456} 
{"a": 123, "c": 456, "b": 789} 
{"a": 123, "b": 789, "c": 456} 
False 
True


10、yaml

YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互 

cat test.yaml

    name: Tom Smith

    age: 37

    spouse: 

        name: Jane Smith

        age: 25

    children:

        - name: Jimmy Smith

          age: 15

        - name1: Jenny Smith

          age: 12


 impopt yaml

 f=open('test.yaml',r)

 x=yaml.load(f)

 print x


{'age': 37, 'spouse': {'age': 25, 'name': 'Jane Smith'}, 'name': 'Tom Smith', 'children': [{'age': 15, 'name': 'Jimmy Smith'}, {'age1': 12, 'name1': 'Jenny Smith'}]}


11、Popen的方法:

Popen.poll() 
用于检查子进程是否已经结束。设置并返回returncode属性。

Popen.wait() 
等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)
与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

例如:

output, error = subprocess.Popen("ls ",

                                         shell=True,

                                         stdout=subprocess.PIPE,

                                         stderr=subprocess.PIPE).communicate()

=====================================

[python] view plain copy print?

    p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE)  

    p.wait()  

    if p.returncode != 0:  

        print "Error."  

         return -1