python内置模块

 

logging模块

日志一共分为五个等级,从低到高依次是debug、info、warning、error、critical
debug: 详细的所有信息
info:     确认一个按期运行
warning:一些意想不到的事情发生了,或者一些问题在不久的将来会出现
error:   更严重的问题,软件没能执行一些功能
critical: 一个严重的错误,这表明程序本身可能无法继续运行

 将日志输出到控制台

import logging
logger = logging.debug("this is debug")
logger = logging.info("this is info")
logger = logging.warning("this is warning")
logger = logging.error("this is error")
logger = logging.critical("this is critical")
结果:
WARNING:root:this is warning
ERROR:root:this is error
CRITICAL:root:this is critical

 

使用logging.basicConfig()设置日志的一些相关信息,如级别、格式等。

import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.debug("this is debug")
logger = logging.info("this is info")
logger = logging.warning("this is warning")
logger = logging.error("this is error")
logger = logging.critical("this is critical")
结果:
DEBUG:root:this is debug
INFO:root:this is info
WARNING:root:this is warning
ERROR:root:this is error
CRITICAL:root:this is critical

 

设置日志格式,输入到指定文件

import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt=' %Y/%m/%d %H:%M:%S', filename='1.log', filemode='w')
logger = logging.getLogger(__name__)  # 创建一个日志对象
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

在当前文件夹里面生成了一个名为1.log的文件,文件格式如下:

 2018/04/25 08:39:46 demo1.py[line:10] DEBUG This is debug message
 2018/04/25 08:39:46 demo1.py[line:11] INFO This is info message
 2018/04/25 08:39:46 demo1.py[line:12] WARNING This is warning message

上面主要是通过logging.basicConfig()函数来实现的,它的相关参数如下:

level: 设置日志级别,默认为logging.WARNING
filename: 指定日志文件名。
filemode: 和file函数意义相同,指定日志文件的打开模式,'w''a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
%(levelname)s: 打印日志级别名称
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(process)d: 打印进程ID
%(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
logging.getLogger([name]):创建一个日志对象

 

os模块

import os
os.system(cmd) # 执行系统命令,但是没有返回结果
'''
nt     为windows系统
posix  为unix系统
'''

如果需要对结果进行处理,我们可以这样做:

result = os.popen(cmd)
result.read()

为了让一段代码,既可以在windows下运行,又可以在linux下运行。

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

相关用法:

os.listdir(".")   # 列出当前目录
os.chdir("/tmp")  # 改变目录
os.getcwd()       # 获取当前路径
os.mkdir("test")  # 创建目录
os.rmdir("test")  # 删除目录
os.rename("test","test1")  #重命名
os.linesep        # 给出当前平台使用的行终止符
# windows  换行符 \n\r
# linux 换行符 \n

判断一个文件是否存在,如果不存在,就创建该目录

import os
if not os.path.exists("test"):
    os.mkdir("test")

查看绝对路径

os.path.abspath("test")

 

random模块

random()函数返回一个随机生成的实数。

import random
# 在1-100内生成一个随机数
print(random.randint(1,100))
# 在1-100内生成一个随机数,每隔两个数取一个数
print(random.randrange(1,100,2))
# [1, 2, 3, 4, 5, 6, 7]中随机取出2个数
print(random.sample([1, 2, 3, 4, 5, 6, 7], 2))

抛掷一枚骰子1000次,统计每一面出现的次数:

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,1001):
            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模块

import string

print(string.ascii_letters) # 生成所有的字母包括大小写
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)  # 生成所有的数字
# 0123456789
print(string.ascii_lowercase)  # 生成所有的小写字母
# abcdefghijklmnopqrstuvwxyz
print(string.ascii_uppercase)  # 生成所有的大写字母
# ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.printable)        # 生成所有可打印字符
# 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(string.punctuation)      # 申城所有特殊字符
# !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(string.hexdigits)  # 生成所有十六进制的字符串
# 0123456789abcdefABCDEF

生成随机六位验证码

print("".join(random.sample(string.ascii_letters + string.digits, 6)))

 

posted @ 2018-04-25 20:22  quartzite  阅读(278)  评论(0编辑  收藏  举报