Python开发——8.模块
一、模块
1.模块
(1)定义:一个.py文件就是一个模块
(2)原因:为了防止程序代码越来越长,对函数进行分组放到不同的文件夹里。
(3)优点:提高代码的可维护性;模块编写完毕可以被别人引用,也可以引用其他模块;可以避免变量名和函数名冲突
(4)模块种类:一共有三种①python标准库;②第三方模块;③应用程序自定义模块
2.模块导入方法
模块导入的本质:通过sys.path找到要导入的函数并执行该脚本,(1)方法会将变量名加载到变量空间,(2)会将变量名加载进来
(1)import 语句
import time
time.sleep(2)
print("OK")
(2)from...import语句
from module_test import cal
res = cal(1,2)
print(res
(3)from...import*语句
from module_test import *#不推荐这种方法,会有可能覆盖自己定义的函数(函数即变量)
res1 = cal(2,3)
res2 = sub(4,2)
print(res1,res2)
3.包
为了避免模块冲突,按目录来组织模块,这种目录就交包,包目录下面会有一个__init__文件,这是包和普通文件夹的区别
只要顶层包名称不冲突,包下面所有的模块都不会冲突
多层包引用
from test1.test2.module_test import cal
res = cal(1,2)
print(res)
4.测试代码
if __name__=="__main__":
两个特性:1.在执行代码中显示“__main__”;2.在调用模块中显示所在文件名称
(1)功能一:
在调试代码的时候加入,从另外一个.py文件调用该模块时,不会显示调试的内容
def cal(x,y):
return (x+y)
def sub(x,y):
return (x-y)
if __name__=="__main__":
print ("ok")
(2)功能二:在执行代码中,防止自己的逻辑代码被别人调用
二、time模块
1.时间戳
import time
print(time.time())#时间戳 秒数,从1970年凌晨开始算,Unix的诞生时间
2.结构化时间
import time
print(time.localtime())#当地时间
print(time.gmtime())#UTC时
(1)将结构化时间转化为时间戳
import time
print(time.mktime(time.localtime()))
(2)将结构化时间转化为字符串时间
import time
print(time.strftime("%Y-%m-%d %X",time.localtime()))
3.字符串时间
import time
t = time.localtime()
print(time.asctime(t))
print(time.ctime(1124324))
(1)将字符串时间转化为结构化时间
import time
print(time.strptime("2018-5-11 21:01:26","%Y-%m-%d %X"))
4.time.sleep()和time.clock()
(1)time.sleep()
time.sleep() 推迟指定的时间运行,单位为秒
(2)time.clock()
time.clock()函数以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
import time
print(time.clock())
time.sleep(2)
print(time.clock())
5.datetime模块
(1)显示当前时间
import datetime
print(datetime.datetime.now())
三、random模块
1.random模块主要有以下几个功能
import random
print(random.random())#随机生成一个小于1的浮点数
print(random.randint(1,3))#随机生成一个整型,可以取到3
print(random.randrange(1,3))#随机生成一个整型,取不到3
print(random.choice([11,22,33,44]))#从列表中随机选取一个数
print(random.sample([11,22,33,44],2))#从列表中随机选取两个数
print(random.uniform(1,4))#生成指定范围内的浮点数
ret = [1,2,3,4,5]
random.shuffle(ret)#打乱顺序
print(ret)
2.生成验证码
import random
def v_code():
ret = ""
for i in range(4):
num = random.randint(0,9)
letter = chr(random.randint(65,90))
s = str(random.choice([num,letter]))
ret += s
return ret
print(v_code())
四、os模块
1.os模块主要有以下功能
import os
os.getcwd()#获取当前的工作目录,即当前Python脚本的工作目录
os.chdir("D:\python_s3\day22")#改变当前脚本工作目录
os.curdir#返回当前目录:(".")
os.pardir#返回当前目录的父目录的字符串名:("..")
os.makedirs("test1/test2")#生成多层递归目录
os.removedirs("test2")#若目录为空,则删除,并递归到上一级目录,若为空也删除,以此类推
os.mkdir("test")#在当前工作目录生成单级目录
os.rmdir("test")#删除单级目录,若不为空,无法删除并报错
os.listdir()#列出指定目录下的所有文件和子目录,包括隐藏文件,以列表的方式打印
os.remove("test1.py")#删除文件
os.rename("test.py","test1.py")#重命名文件或目录
os.stat("D:\python_s3")#获取文件/目录信息
os.sep#输出操作系统特定的路径分隔符,win下为"\\",linux下为"/"
os.linesep#输出操作系统的行中止符,win下为"\t\n",linux下为"\n"
os.pathsep#输出用于分割文件路径的字符串,win下为";",linux下为":"
os.name#输出字符串指示当前操作平台。win下为"nt",linux下为"posix"
os.system("bash command")#运行shell命令,直接显示
os.environ#获取系统环境变量
os.path.abspath(path="D:\python_s3\day22\os模块.py")#返回path规范化的绝对路径
os.path.split("D:\python_s3\day22\__init__.py")#将path分割成目录和文件名二元组返回,中文不行
os.path.dirname("D:\python_s3\day22\__init__.py")#目录
os.path.basename("D:\python_s3\day22\__init__.py")#文件名
os.path.exists("D:\python_s3\day22\__init__.py")#判断路径是否存在,存在返回True,不存在返回False
os.path.isabs("D:\python_s3\day22\__init__.py")#判断是否是绝对路径
os.path.isfile("D:\python_s3\day22\__init__.py")#判断是否是存在的文件
os.path.isdir("D:\python_s3\day22")#判断是否是存在的目录
os.path.join("D:/python_s3/","day22/","test1.py")#拼接路径返回
os.path.getatime("D:\python_s3\day22\test1.py")#返回文件或目录最后存取时间
os.path.getmtime("D:/python_s3/day22/test1.py")#返回文件或目录最后修改时间
五、sys模块
1.sys模块主要有以下功能
import sys
print(sys.argv)#输出当前路径
print(sys.version)#获取当前Python解释器版本信息
print(sys.path)#返回模块的搜索路径,初始化时使用Python环境变量的值
print(sys.platform)#打印操作系统平台名称
sys.exit(0)#退出系统,下面的命令不会执行
2.进度条功能
import sys,time
for i in range(100):
sys.stdout.write("#")
time.sleep(0.1)
sys.stdout.flush()
六、json&pickle模块
1.json模块
序列化:把对象(变量)从内存中变成可存储或传输的过程叫序列化,序列化在Python中叫picking,在其他编程语言中也被称为serialization、marshalling、flattening等
反序列化:把变量内容从序列化的对象重读到内存中的过程叫反序列化,unpicking
(1)json功能和eval相似,但json应用范围更广泛
如果要在不同的编程语言之间传递对象,就要把对象序列化为标准格式,json是较好的序列化方法
a.eval:
f_read=open("hello","r")
data=f_read.read()
print(type(data))
data = eval(data)
print(data["name"])
b.json:
import json
dict={'name':"dazui"}
data=json.dumps(dict)
print(data)
i = 90
i = json.dumps(i)
print(i,type(i))
s = 'hello'
s = json.dumps(s)
print(s,type(s))
l = [11,22]
print(json.dumps(l))
(2)json.dumps和json.loads
如下代码所示:
import json
dic = {'name':'dazui'}
dic_str =json.dumps(dic)
f = open("new_hello","w")
f.write(dic_str) f_read=open("new_hello","r")
data = json.loads(f_read.read())
print(data,type(data))
print(data["name"])
json.loads用来把json.dumps处理的字符串变为原来的值,相当于一个返的过程
(3)json.dump和json.load
与json.dumps和json.loads功能相似
json.dump(dic,f)
#相当于
dic_str =json.dumps(dic)
f.write(dic_str) data=json.load(f)
#相当于
f_read=open("new_hello","r")
data = json.loads(f_read.read())
2.pickle模块
pickle模块与json模块类似,但在读取和写入的时候需要用b模式,同时,pickle只能用于Python中。
import pickle
dic = {'name':'dazui'}
f = open("new_hello","wb")#与json有区别,需要用b模式写入
dic_str =pickle.dumps(dic)
f.write(dic_str) f_read=open("new_hello","rb")#与json有区别,需要用b模式读取
data = pickle.loads(f_read.read())
print(data,type(data))
print(data["name"])
七、shelve模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象。
import shelve
f = shelve.open(r"NBA")
# f["team1"]={"name":"Lakers","Division":"Pacific"}
# f["team2"]={"name":"Warriors","Division":"Pacific"}
# f.close()
print(f.get("team1")["name"])
print(f.get("team1")["Division"])
八、xml模块
xml是实现不同语言或程序之间进行数据交换的协议,与json类似但不如json操作简单,由于出现时间较早,现在许多传统公司的系统接口还是用xml,如金融行业。
1.查看修改删除
import xml.etree.ElementTree as ET#将导入模块命名为ET tree = ET.parse("xml_lesson")
root = tree.getroot()
print(root.tag) 遍历xml文档
for child in root:
print(child.tag,child.attrib)
for i in child:
print(i.tag,i.text) 只遍历year节点
for node in root.iter("year"):
print(node.tag,node.text) 修改
for node in root.iter("year"):
new_year = int(node.text)+1
node.text = str(new_year)
node.set("updated","yes") tree.write("xml_lesson") 删除
for country in root.findall("country"):
rank = int(country.find("rank").text)
if rank >50:
root.remove(country)
tree.write("xml_lesson")
2.创建xml文档
#创建xml文档
import xml.etree.ElementTree as ET#将导入模块命名为ET
new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
age = ET.SubElement(name,"age",attrib={"checked":"no"})
sex = ET.SubElement(name,"sex")
sex.text=""
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = "" et = ET.ElementTree(new_xml)#生成文档对象
et.write("test.xml",encoding="utf-8",xml_declaration=True) ET.dump(new_xml)#打印生成格式
九、re模块
1.re模块本质
正则表达式(RE)是一种小型的、高度专业化的编程语言,内嵌在Python中并通过re模块实现。正则表达式被编译成字节码,由c语言编写的匹配引擎执行
作用:主要用来模糊匹配
2.re模块下的方法
(1)re.findall()
import re
print(re.findall('zui','dazuizuigezuizui'))#用列表返回所有满足匹配条件的结果
(2)re.search()和re.match()
import re
print(re.search("zui",'dazuizuigezuizui'))#在字符串中搜索,匹配成功返回第一个匹配到的值,不成功返回None
print(re.match("dazui","dazuizuigezuizui"))#在字符串开头匹配,匹配成功需要.grup输出结果,不成功返回None
(3).group()
import re
a = "123abc456"
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)) #123abc456,返回整体
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)) #
(4)re.split()
import re
print( re.split("[ab]","abcd"))#先按"a"分割得到""和"bcd",再按"b"分割得到""和"cd"
(5)re.sub()和re.subn()
import re
print(re.sub("\d","dazui","adc1abc2",1))#按规则匹配到字符,将字符替换成指定字符串,"1"用来指定匹配个数
print(re.subn("\d","dazui","abc1abc2abc3"))#按规则匹配字符并替换,打印替换后的字符串和替换的个数
(6)re.compile
import re
obj = re.compile("\d{3}")#编译规则
ret = obj.search("abc123abc456")
print(ret.group())#
(7)re.finditer()
import re
ret = re.finditer("\d","ab1c2bd3e4f5")
print(ret)
print(next(ret).group())#
print(next(ret).group())#
print(next(ret).group())#
print(next(ret).group())#
3.字符匹配(普通字符和元字符)
普通字符匹配:
import re
print(re.findall('dazui','dazuizuigezuizui'))
元字符:. ^ $ * + ? {} | \ [] ()
4.元字符
(1). ^ $ * + ? {}
import re
# . ^ $ * + ? {}
print(re.findall("..zui","dazuizuizuizuige"))#["dazui","uizui"] "."代替一个字符
print(re.findall("^dazui","zuidazuizuizuige"))#[],"^"是否以XXX开头
print(re.findall("zuige$","zuidazuizuizuige"))#["zuige"],"$"是否以XXX结尾
print(re.findall("dazui*","dazuiiiizuizuizuigeiii"))#['dazuiiii'],"*"贪婪匹配(0,+∞)
print(re.findall("dazui+","dazuiiiizuizuizuigeiii"))#['dazuiiii'],"+"贪婪匹配(1,+∞)
print(re.findall("dazui?","dazuiiiizuizuizuigeiii"))#['dazui'],"?"贪婪匹配(0,1)
print(re.findall("dazui{2,3}","dazuiiiizuizuizuigeiii"))#['dazuiii'],"{}"贪婪匹配,自己定义范围
将 * + ? {} 贪婪匹配变为惰性匹配
print(re.findall("dazui*?","dazuiiiizuizuizuigeiii"))#['dazu'],贪婪匹配变为惰性匹配
(2)[]字符集
import re
print(re.findall("da[az]ui","dazuidaduidaaui"))#['dazui', 'daaui'],[az],a或z #三个特殊字符
print(re.findall("da[a-z]ui","dazuidaduixiaozui"))#['dazui', 'dadui'],[a-z],a到z中任意一个
print(re.findall("da[^a-z]ui","da2uidaduixiaozui"))#['da2ui'],[^a-z],不能是a到z中任意一个
print(re.findall("da[\^a-z]ui","da^uida2zidazui"))#['da^ui', 'dazui'],[\^a-z],^或a到z中的任意一个,\的作用是把有特殊意义的字符变得没特殊意义
(3)\转义字符
反斜杠后面跟元字符可以去除元字符的功能,如\^
反斜杠后面跟普通字符可以实现特殊功能,如\d
'''
\d 匹配任意十进制数,相当于类[0-9]
\D 匹配任意非数字字符,相当于类[^0-9]
\s 匹配任意空白字符,相当于类[\t\n\r\f\v]
\S 匹配任意非空白字符,相当于类[^\t\n\r\f\v]
\w 匹配任意字母数字字符下划线和汉字,相当于类[a-zA-Z0-9_]
\W 匹配任意非字母数字字符,相当于类[^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,如空格、&、#等
'''
import re
print(re.findall("I\b","I am hehcouzi"))#[]
print(re.findall(r"I\b","I am hehcouzi"))#['I'] #python解释器也用\进行转义,了解,r代表row string
print(re.findall("c\l","abc\le"))#[]
print(re.findall("c\\l","abc\le"))#[]
print(re.findall("c\\\\l","abc\le"))#['c\\l']
print(re.findall(r"c\\l","abc\le"))#['c\\l'] print(re.findall("\bblow","blow"))#[]
print(re.findall(r"\bblow","blow"))#['blow']
(4)()分组
import re
print(re.findall("(ad)+","adad"))#['ad']
print(re.findall("(?:ad)+","adad"))#['adad'],去优先级
(5)|
import re
print(re.findall("a|b","abc"))#['a', 'b']
十、logging模块
1.简单应用
import logging logging.debug("嘴嘴")
logging.info("嘴哥")
logging.warning("大嘴")
logging.error("克格莫")
logging.critical("深渊巨口")
默认情况下,logging模块将日志打印到标准输出中,且只显示WARNING及以上级别的日志
日志级别:CRITICAL>ERROR>WARNING>INFO>DEBUG
2.logging.basicConfig 灵活配置日志级别、日志格式、输出位置
import logging
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",
datefmt=" %a, %d %b %Y %H:%M:%s",
filename="D:\python_s3\day22\test.log",
filemode="w")
logging.debug("")
logging.info("")
logging.warning("")
logging.error("")
logging.critical("")
在logging.basicConfig()函数中可通过参数来更改logging模块默认行为
filename:用指定的文件名创建FiledHandler,日志会被存储在指定的文件中
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”,还可以指定为“w”
format:指定handler使用的日志显示格式
datefmt:指定日期时间格式
level:设置rootlogger的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stder,sys.stout或者文件(f=open("test.log",w)).
format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用Unix标准的表示时间的浮点数表示
%(relativeCreated)d 字Logger创建以来到输出日志信息时的毫秒数
%(asctime)s 用字符串形式显示当前时间。默认格式是“年-月-日 时:分:秒,毫秒”
%(thread)d 线程ID,可能不存在
%(threadName)s 线程名,可能不存在
%(process)d 进程ID,可能不存在
%(message)s 用户输出的消息
3.logger对象
(1)
import logging
def logger():
logger = logging.getLogger()
fh = logging.FileHandler("test1.log")#创建一个handler,用于写入日志文件
ch = logging.StreamHandler()#再创建一个handler,用于输出到控制台
fm = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
fh.setFormatter(fm)
ch.setFormatter(fm) logger.addHandler(fh)
logger.addHandler(ch)
logger.setLevel("DEBUG")
return logger logger=logger()
logging.debug("嘴嘴")
logging.info("嘴哥")
logging.warning("大嘴")
logging.error("克格莫")
logging.critical("深渊巨口")
logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。
Logger是一个树形层级结构,输出信息之前都要获得一个Logger(如果没有显示的获取,则自动创建并使用root Logger)
logger=logging.getLogger(),返回一个默认的Logger即root Logger,并应用默认的日志级别、Handler和Formatter设置。
(2)
#两个logger打印结果以后定义的为准(一切皆变量)
import logging
logger = logging.getLogger()
logger1 = logging.getLogger("mylogger")
logger2 = logging.getLogger("mylogger")#logger2和logger1s是同一个对象 fh = logging.FileHandler("test_new.log") # 创建一个handler,用于写入日志文件
ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台 logger1.addHandler(fh)
logger1.addHandler(ch) logger2.addHandler(fh)
logger2.addHandler(ch) logger1.setLevel(logging.DEBUG)
logger2.setLevel(logging.INFO) logger1.debug("嘴嘴")
logger1.info("嘴哥")
logger1.warning("大嘴")
logger1.error("克格莫")
logger1.critical("深渊巨口") logger2.debug("嘴嘴")
logger2.info("嘴哥")
logger2.warning("大嘴")
logger2.error("克格莫")
logger2.critical("深渊巨口")
logger1和logger2对应的是同一个Logger实例,只要logging.getLogger(name)中名称参数name相同则返回的Logger实例就是同一个,且仅有一个,即name与Logger实例一一对应。
(3)
#父辈如果有输出,子辈要多输出依次
import logging
logger = logging.getLogger()
logger1 = logging.getLogger("mylogger") fh = logging.FileHandler("test_new.log") # 创建一个handler,用于写入日志文件
ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台 logger1.addHandler(fh)
logger1.addHandler(ch) logger.addHandler(fh)
logger.addHandler(ch) logger1.setLevel(logging.DEBUG)
logger.setLevel(logging.ERROR) logger1.debug("嘴嘴")
logger1.info("嘴哥")
logger1.warning("大嘴")
logger1.error("克格莫")
logger1.critical("深渊巨口") logger.debug("嘴嘴")
logger.info("嘴哥")
logger.warning("大嘴")
logger.error("克格莫")
logger.critical("深渊巨口")
通过logger = logging.getLogger()创建root logger,其余的创建的是子辈logger,父辈打印的时候照常,子辈在打印的时候会向上找父辈,如果父辈存在,子辈会多打印一次。
十二、configparser模块(配置文件的解析模块)
1.创建文档
import configparser
config = configparser.ConfigParser() #config={}
#给空字典加键值对
config["DEFAULT"]={"ServerAliveInterval":"",
"Compression":"yes",
"CompressionLevel":""} config["bitbucket"]={}
config["bitbucket"]["User"]="hg" config["topsecret.server.com"]={}
topsecret =config["topsecret.server.com"]
topsecret["Host Port"]=""
topsecret["ForwardX11"]="no"
#写入
with open("configtest","w") as f:
config.write(f)
2.查看、增加和删除
import configparser
config = configparser.ConfigParser() #config={}
#>>>>>>>>>>>>>>>查看
print(config.sections())#[]
config.read("configtest")
print(config.sections())#['bitbucket', 'topsecret.server.com']
print("topsecret.server.com"in config)#True
print(config["bitbucket"]["UsEr"])#hg,user不区分大小 for key in config['bitbucket']:#打印user serveraliveinterval compression compressionlevel
print(key)
print(config.options("bitbucket"))#打印['user', 'serveraliveinterval', 'compression', 'compressionlevel']
print(config.items("bitbucket"))#打印[('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', '9'), ('user', 'hg')]
print(config.get("bitbucket","compression"))#打印compression的值 #>>>>>>>>>>>>>增
config.add_section("Lakers")
config.set("Lakers","Kobe","")
# config.write(open("configtest","w")) #>>>>>>>>>>>>删除
config.remove_section("topsecret.server.com")
config.remove_option("bitbucket","user")
config.write(open("configtest","w"))
十三、hashlib模块
hashlib模块主要用于加密的相关操作,在Python3.x版本中,替代了md5和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
加密算法存在缺陷,通过撞库可以反解,所以需要在加密算法中自定义key再来加密。
import hashlib
obj = hashlib.md5("hello".encode("utf-8"))
print(obj.hexdigest())#5d41402abc4b2a76b9719d911017c592
obj.update("你好".encode("utf-8"))
print(obj.hexdigest())#2cfe361166078c59730c075c966bfe91
obj=hashlib.md5("hello你好".encode("utf-8"))
print(obj.hexdigest())#2cfe361166078c59730c075c966bfe91 #加密
sha =hashlib.sha256("用来加密别人不知道".encode("utf-8"))
sha.update("hello".encode("utf-8"))
print(sha.hexdigest())#9f95aeca58b1d2c0bc36f2e73037c67d9022bceadcfa01a2b0b7724e631c7bf7
Python开发——8.模块的更多相关文章
- Python开发【模块】:paramiko
一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作 模块安装 C:\Program Files\Python 3.5\Scri ...
- Python开发【模块】:Celery 分布式异步消息任务队列
Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个 ...
- Python开发【模块】:re正则
re模块 序言: re模块用于对python的正则表达式的操作 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags ...
- Python开发【模块】:matplotlib 绘制折线图
matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib # 如 ...
- Python开发【模块】:logging日志
logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式 ...
- Python开发【模块】:sqlalchemy
一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...
- Python开发【模块】:Weakref
Weak references 前言: weakref模块允许python开发者创建弱引用对象. 再接下来中,术语referent代表被弱引用所引用的对象. 一个弱引用对于对象是不能够保持对象存活的: ...
- Python开发【模块】:PyMySQL
PyMySQL 1.安装 [root@localhost ~]# pip install PyMySQL 2.初识 创建数据表结构: mysql> CREATE TABLE `users` ( ...
- Python开发【模块】:Urllib(一)
Urllib模块 1.模块说明: Urllib库是Python中的一个功能强大.用于操作的URL,并在做爬虫的时候经常要用到的库.在Python2.X中,分Urllib库和Urllib库,Python ...
随机推荐
- 去除编辑器的HTML标签
去除HTML携带的标签常用函数 string strip_tags(string str); 编辑器存放内容到数据库时p标签会转换成这种<p></p> 需要使用htmlspec ...
- 手机访问电脑端Wampserver2.4-x64服务
我用的Wampserver2.4-x64 1. 先确保你的手机和电脑连在同一个局域网内. 2. Window + R, 然后输入 ipconfig,然后获取ip地址, 长这样: 192.168.XX. ...
- 定点CORDIC算法求所有三角函数及向量模的原理分析、硬件实现(FPGA)
一.CORDIC算法 CORDIC(Coordinate Rotation DIgital Computer)是一种通过迭代对多种数学函数求值的方法,它可以对三角函数.双曲函数和平面旋转问题进行求解. ...
- python的bit_length方法
bit_length方法作用是得到指定数值的二进制的长度数.宽度数 举例: age=1 v=age.bit_length() print(v) 返回结果: 1 #数值1对应的二进制是1,长度1位 ...
- 转载:IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数
一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...
- 古韵之乞巧 题解 dp题
[noip模拟赛1]古韵之乞巧 描述 闺女求天女,更阑意未阑. 玉庭开粉席,罗袖捧金盘. 向月穿针易,临风整线难. 不知谁得巧,明旦试相看. ——祖咏<七夕> 女子乞巧,是七夕的重头戏 ...
- Spring常用注解总结(3)
@Configuration 表示该类为"配置类",可替换xml配置文件.与@Component不同的是,@Configuration会生成CGLIB代理class. @Targe ...
- Mapnik 3.0.20编译安装
1. 确定epel安装 yum install -y epel-release 2. 按照<CentOS7.2部署node-mapnik>一文中的步骤,手动安装 gcc-6.2.0 和 b ...
- 找不到org.restlet.ext.jackson 解决办法
检出 转成maven工程 ,不过最后发现有两个包maven没有找到: <dependency> <groupId>org.restlet.jse</groupId> ...
- 如何监听Element组件<el-input>标签的回车事件
一.现象 表单提交时需要处理输入框的回车事件,一般的原生input标签可以用@keyup.enter="onSubmit"(tips:onSubmit为定义的方法) 二.解决 1. ...