常用模块-01

一、logging模块

1.1、logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等,相比print,具备如下优点:

①、可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

②、print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出

1.2、默认情况下,logging将日志打印到屏幕,日志级别为WARNING
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

1.3、示例:

import logging
import os
logging.basicConfig(format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
filename=os.path.join(os.getcwd(),"log.txt"),level = logging.WARNING) #定义日志输出格式和输出到log.txt文件里
log = logging.getLogger() #Logger对象
log.setLevel(logging.WARNING) #日志记录级别为WARNNING,同上面的level一样,可二选一,如果这里定义了那结果会以这里的为准
log.info("info") #不会被记录
log.debug("debug") #不会被记录
log.warning("warnning")    #logging.getLogger().debug("hello debug") = logging.debug("hello debug")
log.error("error")
print(log.propagate) #返回输出情况,bool值

logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a',不写的话默认是'a'追加
format
: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

warn和warning的区别:
warn应表明该问题是可以避免的,应该通过修改优化程序剔除这类消息
warning应表明程序对这种问题无能为力,但应该报告

二、os模块

通过os模块可以调用系统命令,获得路劲,获取操作系统的类型等

2.1、示例:

import os
print(os.name)
if os.name == "nt":
cmd = "ipconfig"
elif os.name == "posix":
cmd = "ifconfig"

os.system(cmd) #纯粹执行系统命令,但是没有返回结果


result = os.popen(cmd)
result.read()    #这样就可以对reuslt进行控制了,比如提取ip等

#如果结果为nt, 则为windows系统

#如果结果为posix, 则为unix系统

print(os.listdir("C:"))   #列出当前目录, ls
os.chdir("..")         #改变目录, cd
print(os.getcwd())      #当前路径, pwd
os.mkdir("test")    #创建目录
os.remove("myapp.log")   #删除文件
os.rmdir("test")      #删除目录
os.rename("demon1.py", "demon111.py") #修改名称
print(os.linesep) #字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'

if not os.path.exists("test"):  #判断是否存在,然后做相应的操作
    os.mkdir("test")

print(os.path.abspath("./"))   #获取绝对路径
print(os.path.split("E:\LivePython1\第十一课"))  #输出:('E:\\LivePython1', '第十一课')

三、sys模块

3.1、sys模块的常见函数列表:

sys.argv: 实现从程序外部向程序传递参数。
sys.exit([arg]): 程序中间的退出,arg=0为正常退出。
sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),再执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.
sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
sys.platform: 获取当前系统平台。
sys.stdin,sys.stdout,sys.stderr: stdin,stdout,以及stderr变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们

3.2、示例:

import sys

f = open("1.log", "w")
f.write("yes\n")      #yes直接写入到1.log里面
sys.stdout.write("no")   #no是直接打印出来而不写入到1.log里
sys.stdout = f
print("hello world")    #hello world是直接写入到1.log里面去而不打印出来
f.close()

四、random模块

4.1、常用用法:

①、random.randint(0,99)    #0-99的随机整数

②、random.randrange(0, 101, 2)  #随机选取0到100间的偶数:

③、random.random()      #随机浮点数

④、random.uniform(1, 10)   #1-10的随机浮点数

⑤、random.choice('abcdefg&#%^*f')  #随机字符

⑥、random.sample('abcdefghij',3)   #多个字符中随机选取3个

4.2、示例:

import random

class NumberCount(object):
def __init__(self):
self.number1 = 0
self.number2 = 0
self.number3 = 0
self.number4 = 0
self.number5 = 0
self.number6 = 0
def count(self):
for i in range(1, 1000):
number = random.randint(1, 6)
if number == 1:
self.number1 += 1
if number == 2:
self.number2 += 1
if number == 3:
self.number3 += 1
if number == 4:
self.number4 += 1
if number == 5:
self.number5 += 1
if number == 6:
self.number6 += 1
def getResult(self):
print("1出现的次数: {0}".format(self.number1))
print("2出现的次数: {0}".format(self.number2))
print("3出现的次数: {0}".format(self.number3))
print("4出现的次数: {0}".format(self.number4))
print("5出现的次数: {0}".format(self.number5))
print("6出现的次数: {0}".format(self.number6))

if __name__ == "__main__":
numberCount = NumberCount()
numberCount.count()
numberCount.getResult()

五、string模块

5.1、常用用法:

print(string.ascii_letters)    #打印所有大小写字母
print(string.digits)        #打印所有数字
print(string.ascii_lowercase)   #打印所有小写字母
print(string.ascii_uppercase)   #打印所有大写字母
print(string.printable)       #打印所有可打印的
print(string.punctuation)     #打印所有特殊字符
print(string.hexdigits)      #打印十六进制符
print("".join(random.sample(string.ascii_letters + string.digits, 4)) #随机打印四个字符串,包含字母和数字

 

posted @ 2018-04-25 21:28  一条咸鱼的梦想  阅读(156)  评论(0编辑  收藏  举报