Python之模块

 

模块:是实现某一功能的代码的集合,类似于一个函数。模块在使用时直接导入即可。

导入模块,其实就是告诉python解释器去解释这个导入的py文件。若导入的是一个包,则python解释器去解释该包里面的__init__.py文件。

模块导入的时候,是以sys.path作为基准。

>>> import sys
>>> print sys.path
['', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/MySQL_python-1.2.4b4-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pandas-0.16.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/numpy-1.9.2-py2.7-linux-x86_64.egg', '/usr/local/lib/python2.7/dist-packages/pytz-2015.4-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/python_dateutil-2.4.2-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
View Code

一、开源模块

导入开源模块时,需要现安装该模块包。

两种安装方式:

1、在线安装:yum、pip、apt-get

2、编译安装:下载源码包->解压->编译(python setup.py build)->安装(python setup.py install)

确认安装成功后,即可导入使用。

eg:

安装:

# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
 
# 下载安装 pycrypto
wget https://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
tar -xvf pycrypto-2.6.1.tar.gz
cd pycrypto-2.6.1
python setup.py build
python setup.py install
 
# 进入python环境,导入Crypto检查是否安装成功
 
# 下载安装 paramiko
wget https://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
tar -xvf paramiko-1.10.1.tar.gz
cd paramiko-1.10.1
python setup.py build
python setup.py install
 
# 进入python环境,导入paramiko检查是否安装成功
安装paramiko模块

 

使用:

#!/usr/bin/env python
#coding:utf-8

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.108', 22, 'alex', '123')
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close();
通过帐号连接服务器

 

二、内置模块

1、os模块

主要用于系统管理的操作

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os模块常用命令

2、sys模块

主要用于对解释器相关的操作

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]
sys常用命令

3、pickle模块

主要用于序列化的操作

pickle:python特有类型和python数据类型之间的转换

该模块有dump、dumps、load、loads四个方法

pickle.dumps 将数据通过特殊的形式转换成只有pyton才能识别的字符串。

>>> import pickle
>>> data = {'1':123,'2':456}
>>> print pickle.dumps(data)
(dp0
S'1'
p1
I123
sS'2'
p2
I456
s.
pickle.dumps

pickle.dump 主要对文件进行操作,它将数据过特殊的形式转换成只有pyton才能识别的字符串,并写入文件。

>>> with open('result.pk','w') as f:
...     pickle.dump(data,f)
... 
>>>
pickle.dump

pickle.loads 与dumps相对应,将特殊的字符串转换成python中的数据类型。

>>> import pickle
>>> s = [1,2,3,4]
>>> p1 = pickle.dumps(s)
>>> print p1
(lp0
I1
aI2
aI3
aI4
a.
>>> s1 = pickle.loads(p1)
>>> print s1
[1, 2, 3, 4]
pickle.loads

pickle.load 与dump相对应,将特殊字符串的文件抓换成字符串。

>>> import pickle
>>> f = open('result.pk','r')
>>> s = pickle.load(f)
>>> print s
{'1': 123, '2': 456}
pickle.load

4、logging模块

用于日志记录

eg:

import logging
 
logging.warning("user [alex] attempted wrong password more than 3 times")
logging.critical("server is down")
 
#输出
WARNING:root:user [alex] attempted wrong password more than 3 times
CRITICAL:root:server is down
logging

把日志写入文件:

import logging
 
logging.basicConfig(filename='example.log',level=logging.INFO)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
write log into file

其中下面这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。

logging.basicConfig(filename='example.log',level=logging.INFO)

加上时间:

import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
logging.warning('is when this event was logged.')

5、time模块

与时间有关的操作

时间有三种表示方式:

  • 时间戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
  • 结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime()

eg:

>>> import time
>>> print time.time()
1457588586.28
>>> print time.mktime(time.localtime())
1457588652.0
>>> print time.gmtime()
time.struct_time(tm_year=2016, tm_mon=3, tm_mday=10, tm_hour=5, tm_min=44, tm_sec=33, tm_wday=3, tm_yday=70, tm_isdst=0)
>>> print time.strftime('%Y-%m-%d')
2016-03-10

>>> import datetime
>>> print datetime.datetime.now()
2016-03-10 13:49:32.833639
>>> print datetime.datetime.now() - datetime.timedelta(days=1)
2016-03-09 13:50:25.230468
time

6、re模块

用于正则匹配

字符:

  . 匹配除换行符以外的任意字符
  \w 匹配字母或数字或下划线或汉字
  \s 匹配任意的空白符
  \d 匹配数字
  \b 匹配单词的开始或结束
  ^ 匹配字符串的开始
  $ 匹配字符串的结束

次数:

  * 重复零次或更多次
  + 重复一次或更多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次

IP:
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手机号:
^1[3|4|5|8][0-9]\d{8}$

match(pattern, string, flags=0)

从起始位置开始根据模型去字符串中匹配指定内容,匹配单个.

  • 正则表达式
  • 要匹配的字符串
  • 标志位,用于控制正则表达式的匹配方式
>>> import re
>>> obj = re.match('\d+','123fkdfk')
>>> print obj.group()
123

search(pattern, string, flags=0)

根据模型去字符串中匹配指定内容,匹配单个。

>>> obj = re.search('\d+','u12323fdkfl')
>>> print obj.group()
12323

findall(pattern, string, flags=0)

上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。

>>> obj = re.findall('\d+','fdf343dfldfj098dfdf')
>>> print obj
['343', '098']

sub(pattern, repl, string, count=0, flags=0)

用于替换匹配的字符串

>>> content = '123jkfjkf678'
>>> new_content = re.sub('\d+','sb',content)#将数字替换成'sb'
>>> print new_content
sbjkfjkfsb

split(pattern, string, maxsplit=0, flags=0)

根据指定匹配进行分组

 

>>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
>>> new_content = re.split('\*',content)
>>> print new_content
["'1-2", '((60-30+1', '(9-2', '5/3+7/3', '99/4', '2998+10', '568/14))-(-4', '3)/(16-3', "2))'"]
>>> 

>>> new_content = re.split('[\+\-\*\/]+',content)
>>> print new_content
["'1", '2', '((60', '30', '1', '(9', '2', '5', '3', '7', '3', '99', '4', '2998', '10', '568', '14))', '(', '4', '3)', '(16', '3', "2))'"]
>>>

>>> content = "'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'"
>>> content = re.sub('\s*','',content)
>>> new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)',content,1)
>>> print new_content
["'1-2*((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-", '-4*3', "/(16-3*2))'"]
re.split

7、random模块

主要生成随机数

>>> import random
>>> print random.random()
0.645138583945
>>> print random.randint(1,4)
3
>>> print random.randrange(1,20)
10

生成验证码

>>> import random
>>> checkcode = ''
>>> for i in range(4):
...     current = random.randrange(0,4)
...     if current != i:
...             temp = chr(random.randint(65,90))
...     else:
...             temp = random.randint(0,9)
...     checkcode +=str(temp)
... 
>>> print checkcode
PBXE

 

posted @ 2016-03-10 14:35  ahaii  阅读(292)  评论(0编辑  收藏  举报