模块:
定义:一堆代码实现了某个功能的代码集合。函数式编程完成一个功能,
示例:os 是操作系统的模块
分类:自定义模块/内置模块200个/开源模块 pypi.python.org
安装第三方模块:pip install/easy install/download package ---- python setup.py install/download
自定义模块:
__init__.py的目录就是自定义模块
好处:功能复用/解耦/可扩展性可维护性
调用方式:from #module name import function name
内置模块:
time datetime模块
import time,datetime
print time.time() #1563521388.25
print time.ctime() #Fri Jul 19 15:29:48 2019
print time.gmtime() # time.struct_time(tm_year=2019, tm_mon=7, tm_mday=19, tm_hour=7, tm_min=30, tm_sec=32, tm_wday=4, tm_yday=200, tm_isdst=0)
print time.localtime() #time.struct_time(tm_year=2019, tm_mon=7, tm_mday=19, tm_hour=15, tm_min=46, tm_sec=39, tm_wday=4, tm_yday=200, tm_isdst=0)
print time.mktime(time.localtime())
print time.strftime("%Y-%m-%d")
print time.strptime("2019-07-02","%Y-%m-%d")
print datetime.datetime.today() #2019-07-19 15:57:40.639000
print datetime.datetime.now() #2019-07-19 15:57:40.639000
print datetime.datetime.now().timetuple()
random模块
import random
print random.random() #0.404556204712
print random.randint(1,100) #40
print random.randrange(1,200) #79
check_code = ""
for i in range(4):
currnet = random.randint(0,10)
check_code = check_code + str(currnet)
print check_code
os
# -*- coding:utf-8 -*-
import os
#这个模块主要是用来和OS进行交互的一堆混杂的方法在里面 更高级的模块还有shutil
#主要有os.path判断文件相关的东西 还可以os.system os.popen运行一些系统命令
print os.getcwd() #获取当前的目录
os.system(r'cd d:\\') #启动一个子shell 运行命令
print os.getcwd() #所以不会有变化
os.chdir('d:\\')
print os.getcwd()
print os.curdir # . 为什么是.呢
print os.pardir # ..
print os.sep # \
print os.stat('d:\\') #查看目录或者文件的状态信息
os.mkdir(r'D:\\2') #生成单级目录
os.rmdir(r'2')
os.makedirs('d:\\1\\2\\3')
os.removedirs(r'd:\1\2\3')
# print res
print os.listdir(os.getcwd())
os.rename('1','1.old')
print os.linesep
print os.environ
print os.path.split(os.getcwd())
print os.path.abspath('1.old') #绝对路径
print os.path.dirname('1.old') #
print os.path.basename('1.old') #文件名
print os.path.isabs('1.old')
print os.path.isdir('1.old')
print os.path.isfile('1.old')
print os.path.getctime('1.old') #create time
print os.path.getatime('1.old') #access time
print os.path.getmtime('1.old') #modify time
res = os.popen('dir') #可以取到返回值
res2 = os.system('dir') #只可以看到返回值的状态
print res.read()
print res2
import os
print os.stat('1.txt')
sys
# -*- coding:utf-8 -*-
import sys
# 这个模块主要是查看解释器相关的东西,比如运行的参数个数啊 最大的int大小啊 sys.exit 退出程序啊
print sys.path #查找包的路径
print sys.argv #参数
shutil
# -*- coding:utf-8 -*-
import shutil
print dir(shutil)
f1 = open("1.txt")
f2 = open("2.txt",mode='w')
shutil.copyfileobj(f1,f2) # 复制文件内容到2.txt
shutil.copyfile('1.txt','3.txt') #直接文件名进行覆盖
shutil.copymode() #拷贝chmod可以改变的东西 777
shutil.copystat() #atime,mtime
shutil.copytree('/StoragePlus','/StoragePlus.bak') #递归的拷贝
shutil.rmtree('/StoragePlus.bak') #递归的删除
shutil.make_archive("/",'gztar') #压缩文件 #tarfile zipfile用于解压
json/pickle/shelve
# -*- coding:utf-8 -*-
import pickle,json,shelve
dict1 = dict(name='wyp',age='29')
# f = open('pickle.txt','w')
# pickle.dump(dict1,f) #Python对象序列化为一个字节流 从内存读取数据然后写入文件
f = open('pickle.txt','r')
dict2 = pickle.load(f) #从文件反序列存储的内容 json是所有语言通用的 只能序列化基本的数据类型
print dict2
#pickle是python独有的 可以序列化基本所有的数据类型
# d = shelve.open('shelve_test')
class Foo(object):
def __init__(self,n):
self.n = n
# f1 = Foo(1)
# f2 = Foo(2)
#
# d['test'] = ['1','2','3']
# d['t1'] = f1
# d['t2'] = f2
#
# d.close()
d = shelve.open('shelve_test')
print d.get('t1').n,d.get('t2').n,d.get('test')
#shelve 可以读取所有的key 而pickle只能挨次读取
xml:操作xml的
import xml.etree.ElementTree as ET
tree = ET.parse("web.html")
root = tree.getroot()
print root.tag
PyYAML:操作yaml文件的
略
configParser:
用于生成和修改常见配置文档 回头实际应用吧
hashlib
MD5和SHA加密
subprocess
>>> subprocess.call('df -hT',shell=True)
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root xfs 49G 17G 32G 35% /
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 80K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-home xfs 24G 37M 24G 1% /home
/dev/sda1 xfs 497M 119M 379M 24% /boot
/dev/sr0 iso9660 4.0G 4.0G 0 100% /mnt
0
#Do not use stdout=PIPE or stderr=PIPE with this function as that can deadlock based on the child process output volume.
#Use Popen with the communicate() method when you need pipes.
>>> a = subprocess.Popen('df -hT',shell=True,stdout=subprocess.PIPE)
>>> a
<subprocess.Popen object at 0x7fabb64977d0>
>>> dir(a)
['__class__', '__del__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_child_created', '_close_fds', '_communicate', '_communicate_with_poll', '_communicate_with_select', '_execute_child', '_get_handles', '_handle_exitstatus', '_internal_poll', '_set_cloexec_flag', '_translate_newlines', 'communicate', 'kill', 'pid', 'pipe_cloexec', 'poll', 'returncode', 'send_signal', 'stderr', 'stdin', 'stdout', 'terminate', 'universal_newlines', 'wait']
>>> a.stdout.read()
'\xe6\x96\x87\xe4\xbb\xb6\xe7\xb3\xbb\xe7\xbb\x9f \xe7\xb1\xbb\xe5\x9e\x8b \xe5\xae\xb9\xe9\x87\x8f \xe5\xb7\xb2\xe7\x94\xa8 \xe5\x8f\xaf\xe7\x94\xa8 \xe5\xb7\xb2\xe7\x94\xa8% \xe6\x8c\x82\xe8\xbd\xbd\xe7\x82\xb9\n/dev/mapper/rhel-root xfs 49G 17G 32G 35% /\ndevtmpfs devtmpfs 3.9G 0 3.9G 0% /dev\ntmpfs tmpfs 3.9G 80K 3.9G 1% /dev/shm\ntmpfs tmpfs 3.9G 8.9M 3.9G 1% /run\ntmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup\n/dev/mapper/rhel-home xfs 24G 37M 24G 1% /home\n/dev/sda1 xfs 497M 119M 379M 24% /boot\n/dev/sr0 iso9660 4.0G 4.0G 0 100% /mnt\n'
>>>
logging
import logging
logger = logging.getLogger("logger")
handler1 = logging.StreamHandler() #sys.stdout or sys.stderr
handler2 = logging.FileHandler(filename="test.log") # write to disk files
logger.setLevel(logging.DEBUG)
handler1.setLevel(logging.WARNING)
handler2.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
handler1.setFormatter(formatter)
handler2.setFormatter(formatter)
logger.addHandler(handler1)
logger.addHandler(handler2)
# print handler1.level #30
# print handler2.level #10
# print logger.level #10
logger.debug('This is a customer debug message')
logger.info('This is an customer info message')
logger.warning('This is a customer warning message')
logger.error('This is an customer error message')
logger.critical('This is a customer critical message')
0719做什么:
把备份交换机程序分层 弄一个config目录出来