常用模块
Posted 星空的衣角
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用模块相关的知识,希望对你有一定的参考价值。
一、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)) #随机打印四个字符串,包含字母和数字
以上是关于常用模块的主要内容,如果未能解决你的问题,请参考以下文章