模块

  1. 模块介绍
  2. time &datetime模块
  3. random
  4. os
  5. sys
  6. shutil
  7. json & picle
  8. shelve
  9. xml处理
  10. yaml处理
  11. configparser
  12. hashlib
  13. subprocess
  14. logging模块

模块就是一个功能的集合。

模块就和乐高积木差不多,你用这些模块组合出一个模型,然后也可以用这个模块加上其他的模块组合成一个新的模型

模块的种类:

1、内置模块(python自带的比如os、file等模块)

2、自定义模块,自己写的模块

3、第三方模块

模块的导入:

import module  #导入模块下的全部模块
from module.xx.xx import *  #导入模块下的全部模块
from module.xx.xx import xx  #导入某块下的指定模块
from module.xx.xx import xx as rename   #导入指定模块并给他设置别名 

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所指向的文件或者目录的最后修改时间

 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]

3、hashlib

mport hashlib

  

# ######## md5 ########

  

hash = hashlib.md5()

hash.update('shuaige')

print hash.hexdigest()

  

>>> import hashlib

>>> hash = hashlib.md5()

>>> hash.update('shuaige')

>>> print hash.hexdigest()

37d2b9990df5a6843caf19352fee42a6

 

# ######## sha1 ########

  

hash = hashlib.sha1()

hash.update('shuaige')

print hash.hexdigest()

 

>>> hash = hashlib.sha1()

>>> hash.update('shuaige')

>>> print hash.hexdigest()

fdb58cf91e7291b67815440281e4154e87747b68

# ######## sha256 ########

  

hash = hashlib.sha256()

hash.update('shuaige')

print hash.hexdigest()

  

>>> hash = hashlib.sha256()

>>> hash.update('shuaige')

>>> print hash.hexdigest()

0dc6e2b03447ac1fde5a8ae5f9d609b2b37f26f5c8aeec5d244dde6184fde90d

# ######## sha384 ########

  

hash = hashlib.sha384()

hash.update('shuaige')

print hash.hexdigest()

 

>>> hash = hashlib.sha384()

>>> hash.update('shuaige')

>>> print hash.hexdigest()

6dd79c38dc27c8f69411c2e77face2209606e08702fcbe7c5f73bb9e6a9ef1f58890156604ad6c71581dc5b6f7aea85e

# ######## sha512 ########

  

hash = hashlib.sha512()

hash.update('shuaige')

print hash.hexdigest()

 

>>> hash = hashlib.sha512()

>>> hash.update('shuaige')

>>> print hash.hexdigest()

e9c94882cb0d9c61919f4d4c539a8bafe5f5a0708d214fbd50343c1e96a01ebb732883d0b0b36bff1e542cff69071395f511650944561807488700c71fb06338

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

hash = hashlib.md5('898oaFs09f')

hash.update('shuaige')

print hash.hexdigest()

 

-----------------------------------------------------------------------------------

 

>>> hash = hashlib.md5('898oaFs09f')  #这里把自定义的信息加上然后在进行加密

>>> hash.update('shuaige')

>>> print hash.hexdigest()

6d1233c4e14a52379c6bc7a045411dc3

 4、json 和 pickle

用于序列化的两个模块

json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换

json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load

json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中  loads把字符串转换成数据类型  load把文件打开从字符串转换成数据类型

pickle同理

现在有个场景在不同设备之间进行数据交换很low的方式就是传文件,dumps可以直接把服务器A中内存的东西发给其他服务器,比如B服务器、

在很多场景下如果用pickle的话那A的和B的程序都的是python程序这个是不现实的,很多时候都是不同的程序之间的内存交换怎么办?就用到了json(和html类似的语言)

并且josn能dump的结果更可读,那么有人就问了,那还用pickle做什么不直接用josn,是这样的josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。

为什么他不能序列化上面的东西呢?因为josn是跨语言的!

例子如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
__author__ = 'luotianshuai'


import json

test_dic = {'name':'luotianshuai','age':18}
print '未dumps前类型为:',type(test_dic)
#dumps 将数据通过特殊的形式转换为所有程序语言都识别的字符串
json_str = json.dumps(test_dic)
print 'dumps后的类型为:',type(json_str)

#loads 将字符串通过特殊的形式转为python是数据类型

new_dic = json.loads(json_str)
print '重新loads加载为数据类型:',type(new_dic)

print '*' * 50

#dump 将数据通过特殊的形式转换为所有语言都识别的字符串并写入文件
with open('test.txt','w') as openfile:
    json.dump(new_dic,openfile)
    print 'dump为文件完成!!!!!'
#load 从文件读取字符串并转换为python的数据类型

with open('test.txt','rb') as loadfile:
    load_dic = json.load(loadfile)
    print 'load 并赋值给load_dic后的数据类型:',type(load_dic)

5、ConfigParser

用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser。

[section1]

k1 = v1

k2:v2

  

[section2]

k1 = v1

6、操作系统相关命令:

可以执行shell命令的相关模块和函数有:

  •     os.system
  •     os.spawn*
  •     os.popen*          --废弃
  •     popen2.*           --废弃
  •     commands.*      --废弃,3.x中被移除

 

import commands
testmodel = commands.getoutput('fdisk -l ')   #获取用户的输出结果(结果以字符串存储)
type(testmodel)
#<type 'str'>

commands.getstatus('/etc/passwd') #判断文件是否存在,存在返回不存在报错
#'-rw-r--r-- 1 root root 1196 Oct 19 20:15 /etc/passwd'
commands.getstatus('/etc/passwdsd')
#'ls: cannot access /etc/passwdsd: No such file or directory'


result = commands.getstatusoutput('cmd') #获取用户的输出结果和状态正确状态为:0

以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。建议以后使用此方法来执行系统命令:

call  :执行命令,输出和状态码,如果正确状态码为0,错误为大于0的值!

import subprocess
subprocess.call(["ls",'-l','/etc/'],shell=False)  #使用python执行shell命令shell=False
subprocess.call(‘ls -l /etc/ ’,shell=True)  #使用原生的shell执行命令shell=True
#一般建议统一使用python执行shell命名除非python没有的,在建议使用shell原生执行

check_call执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

import subprocess

>>>subprocess.call(["ls",'-l','/etc/'],shell=False)   #执行成功返回状态码0
>>>subprocess.call(["ls",'-l','/etc/sdfsdf'],shell=False) #执行错误直接报异常

check_output:执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

>>> subprocess.check_output(["echo", "Hello World!"]) #执行结果成功状态码是0直接返回结果
'Hello World!\n'
>>> subprocess.check_output(["echo1", "Hello World!"]) #执行结果失败状态码不为0直接报错

subprocess.Popen(...) :用于执行复杂的系统命令

import subprocess
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

6、shutil 高级的 文件、文件夹、压缩包 处理模块

高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容

>>> s = file('test.py','rb')
>>> d = file('new.py','wb')
>>> shutil.copy
shutil.copy(         shutil.copyfile(     shutil.copymode(     shutil.copytree(
shutil.copy2(        shutil.copyfileobj(  shutil.copystat(     
>>> shutil.copy
shutil.copy(         shutil.copyfile(     shutil.copymode(     shutil.copytree(
shutil.copy2(        shutil.copyfileobj(  shutil.copystat(     
>>> shutil.copyfileobj(s,d)
>>> d.close()
>>> exit()
root@tim:/opt# ls
new.py  test.py
root@tim:/opt# 

shutil.copyfile(src, dst)

拷贝文件

>>> import shutil
>>> shutil.copyfile('new.py','newnew.py')
>>> import subprocess
subprocess.Popen(['ls','-l'])
<subprocess.Popen object at 0x7f533f61c090>
>>> total 12
-rw-r--r-- 1 root root 53 Dec  7 22:38 newnew.py
-rw-r--r-- 1 root root 53 Dec  7 22:35 new.py
-rwxr-xr-x 1 root root 53 Dec  7 22:32 test.py

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细

import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()




import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()

7、日志模块

用于便捷记录日志且线程安全的模块

import logging

def log_models(logname,infos):
    logger = logging.getLogger(logname) #定义username
    logger.setLevel(logging.DEBUG) #定义全局日志级别

    ch = logging.StreamHandler() #定义屏幕日志
    ch.setLevel(logging.DEBUG) #定义屏幕日志级别

    fh = logging.FileHandler('log.txt') #定义日志保存文件
    fh.setLevel(logging.DEBUG) #定义文件日志保存级别

    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")

    ch.setFormatter(formatter) #屏幕输出格式套用自定义的日志格式
    fh.setFormatter(formatter) #日志输出格式套用自定义的日志格式

    logger.addHandler(ch) #把屏幕输出日志交给logger接口执行
    logger.addHandler(fh)#把文件输出日志交给logger接口执行

    logger.debug(infos) #调用日志模块

对于等级:

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

转载于:https://my.oschina.net/u/2551551/blog/700742

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值