Python 运维开发 学习记录 语言基础(三)

Shell/Python   函数   内置模块  

一、内置模块的常用方法

  • __name__

    • __name__ 的值默认是一个特别缺省"__main__"
    • 如果 import 一个模块,那么模块name 的值通常为模块文件名
    • 模块是对象,并且所有的模块都有一个内置属性 __name__,一个模块的__name__的值取决于您如何应用模块
  • __file__

    • 如果程序用相对路径执行,__file__获得py脚本的相对路径
    • 按绝对路径执行则得到的是绝对路径。
    • 为了得到绝对路径,我们需要 os.path.realpath(__file__)
  • __doc__

    • 模块本身是一个对象,而每个对象都会有一个doc属性。该属性用于描述该对象的作用
class MyClass:  
    'string.'
    def printSay():
         print 'say welcome to you.'
print MyClass.__doc__  
print MyClass.printSay.__doc__  

二、函数

  • 参数
def shopping(name,product):               #这里name 和 tool 形参  
    print "%s want to buy %s" % (name,tool)

product= "mac"

print "====list====="  
names = ['leo','jim','join','tom']  
for name in names:  
    shopping(name,product)

print "=dict=="  
shopdic = {'hong':'ipad',"leo":'mac'}  
for k,v in shopdic.items():  
    shopping(k,v)
  • 参数默认值
def say(words="Hello,World"):  
    print words
say("hello boy")    #转入参数比默认值高,输出hello boy  
say()               #不传参数输出默认值

def say(a,b="hello b"):  #有默认值的参数必须放在后面,需要赋值的参数放前面  
    print a,b
say("hello a")  
  • 可变参数
  • 返回值
def say():  
    name = "leoiceo"
    name2 = "redhat"
    return name,name2      #return 函数跳出
name,name2 = say()  
print "%s is not %s" % (name,name2)  

三、内置函数

#print help()
print dir()           #当前作用域的变量值  
print vars()          #打印变量值和名字  
#print type()
import temp  
import temp  
reload(temp)          #重新加载模块  
id([12])  
#is
------------------
cmp(2,3)              #比较两个数据大小  
cmp(2,2)  
cmp(2,1)  
cmp(10,1)  
abs()                 #绝对值  
bool()                #判断真假,有数据为真,空为假  
divmod(10,1)         #除取模 (商和余数)  
max()                 #最大值 比较数值或者列表  
min()                 #最小值  
sum()                 #求和  
pow(2, 11)            #幂运算 2^11  
------------------
len()                 #统计字符串长度  
all()                 #全部为真才为真  
any()                 #只要有一个为真就为真  
------------------
chr()                 #返回整数i对应的ASCII字符。与ord()作用相反  
ord()                 #返回整数i对应的ASCII字符。与chr()作用相反  
hex()                 #12进制  
oct()                 #8进制  
bin()                 #6进制  
------------------
print range(10)  
print xrange(10)  
for i in xrange(10):  #迭代器  
    print i
for k,v in enumerate([1,2,3,4]):  
    print k,v
------------------
s= 'i am {0}'  
print  s.format('alex')  
str(1)  
------------------
def Function(arg):  
    print arg
print apply(Function,('aaaa')) #执行函数  
print map(lambda x:x+1,[1,2,3]) #匿名函数  
print filter(lambda x: x==1,[1,23,4]) #True序列  
print reduce(lambda x,y:x+y,[1,2,3]) #累加  
x = [1, 2, 3]  
y = [4, 5, 6]  
z = [4, 5, 6]  
print zip(x, y,z)  
------------------
#__import__()
#hasattr()
#delattr()
#getattr()
module = __import__('temp')  
print dir(module)  
val = hasattr(module, 'version')  
print val  
------------------
#callable()
    #函数、类必须要有 __call__ 方法
#compile
#eval
com = compile('1+1','','eval')  
print eval(com)  
#exec语句
code = "for i in range(0, 10): print i"  
cmpcode = compile(code, '', 'exec')  
exec cmpcode  
code = "print 1"  
cmpcode = compile(code, '', 'single')  
exec cmpcode  
------------------
#isinstance()
#issubclass()
#super()
#staticmethod()

四、常用模块

  • random 用于成生随机数
  • 生成验证码
import random

def generate_checkcode():  
    checkcode = ''
    for i in range(4):
        current = random.randint(0,4)
        print current
        print '----'
        print i
        if current != i:
            temp =  chr(random.randint(65,90))
        else:
            temp = random.randint(0,9)

        checkcode += str(temp)
    print checkcode

generate_checkcode()  
  • md5加密
import md5  
hash = md5.new()  
hash.update('redhat')  
print hash.hexdigest()

import hashlib  
hash = hashlib.md5()  
hash.update('redhat')  
print hash.hexdigest()  
  • re
import re  
s = "hello world"  
a = re.match("h.*",s)    #头开始匹配  
b = re.search("e.*o",s)  #搜索长匹配,匹配到最后一个值  
c = re.findall("l.",s)   #搜索所有匹配的值,直到找到最后一个相匹配的值  
d = re.split("l.",s)     #以匹配的值进行分隔  
e = re.sub("l.","ww",s)  #符合正规表达式的值替换为"ww"

ip = re.findall(r'\d+(?:\.\d+){3}',s)  #匹配IP地址  
  • re常用匹配规则
\d   一个数字
\d+  一个或者多个数字
.+   一个或多个任意字符
*    一个或多个任意字符
?    0 or 1
\s   space
\S   非空白
\w   字母或者数字 [0-9a-z]
  • 序列化和json
import pickle  
#内存数据保存到硬盘上
data = { "k1":123,'k2':456, 'k3':789}

with open("result.pkl",'wb') as fp:  
#pickle.dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
    pickle.dump(data,fp)
with open("result.pkl",'rb') as fp2:  
#pickle.load 把python语言认识的字符串转加载成原有数据
    name2 = pickle.load(fp2)
    print name2
  • time
import time  
#1、时间戳    1970年1月1日之后的秒
#3、元组 包含了:年、日、星期等... time.struct_time
#4、格式化的字符串    2014-11-11 11:11

print time.time()  
print time.mktime(time.localtime())

print time.gmtime()            #可加时间戳参数  
print time.localtime()         #可加时间戳参数  
print time.strptime('2014-11-11', '%Y-%m-%d')  
print time.strftime('%Y-%m-%d') #默认当前时间  
print time.strftime('%Y-%m-%d',time.localtime()) #默认当前时间  
print time.asctime()  
print time.asctime(time.localtime())  
print time.ctime(time.time())

import datetime  
'''  
datetime.date:                 表示日期的类。常用的属性有year, month, day  
datetime.time:                 表示时间的类。常用的属性有hour, minute, second, microsecond  
datetime.datetime:             表示日期时间  
datetime.timedelta:            表示时间间隔,即两个时间点之间的长度  
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])  
strftime("%Y-%m-%d")  
'''  
import datetime  
print datetime.datetime.now()    打印当前的时间  
print datetime.datetime.now() - datetime.timedelta(days=5)  与今天间隔五天的日期  
  • sys
import sys  
sys.argv           命令行参数List,第一个元素是程序本身路径  
sys.exit(n)        退出程序,正常退出时exit(0)  
sys.version        获取Python解释程序的版本信息  
sys.maxint         最大的Int值  
sys.maxunicode     最大的Unicode值  
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值  
sys.platform       返回操作系统平台名称  
sys.stdout.write('please:')  
val = sys.stdin.readline()[:-1]  
print val  
  • 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所指向的文件或者目录的最后修改时间