Python--模块

模块的定义:模块就是一个py文件,模块是写好的,但是不能直接使用的功能,使用是需要用import关键字引用
模块分为三种:内置模块、扩展模块、自定义模块
collections模块,在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据
类型:Counter、deque、defaultdict、namedtuple和OrderedDict(有序的字典类型)等。

collections模块
import collections
声明一个有序的字典
t = collections.OrderedDict()#声明t是一个有序的字典
print(t) --->OrderedDict() t的操作和字典的操作一样
t['apple'] = 15
t['orange'] = 12
for i in t:
  print(i)----->输出结果为:apple 15
orange 12 每次运行的时候都是按照这个顺序显示
定义一个默认字典,并且字典的value值是一个列表,如果字典中没好友key,如果key不在默认字典中,则创建一个默认值为[]空列表的key
d = collections.defaultdict(list)#
for value in  values:
if value>66:
if 'k1' in my_dict:
d['k1'].append(value)
else:
d['k1'] = [value]
else:
if 'k2' in my_dict:
d['k2'].append(value)
else:
d['k2'] = [value]
namedtuple我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:
命名方式collections.namedtuple('名称',[属性list])
point = collections.namedtuple('point',['x','y'])
p=point(1,2)
print(p.x)----->输出结果为1
deque 双端队列deque除了实现list的append()pop()外,还支持appendleft()popleft()
这样就可以非常高效地往头部添加或删除元素。
q = collections.deque([])
q.append(1)
q.append(2)
q.appendleft('NO1')
print(q)---->deque(['NO1', 1, 2])
 
time 模块:有三种方式来表示时间,时间戳,元组(struct_time),格式化时间
时间戳时间print(time.time())
格式化时间:print(time.strftime("%Y-%m-%d %H-%M-%S"))--->2018-05-10 20-59-39当前时间
      print(time.strftime("%Y-%m-%d %H-%M-%S",time.)
结构化时间:print(time.localtime())--->time.struct_time(tm_year=2018, tm_mon=5, tm_mday=10, tm_hour=21, tm_min=3, tm_sec=43, tm_wday=3, tm_yday=130, tm_isdst=0)
      print(time.localtime(1500000000))-->可以接收一个时间戳时间

 

 

 
 

结构化时间是时间戳时间(计算机看懂的时间)转化为格式化时间(人能看懂的时间)的桥梁


二、random模块,随机取值模块

imoprt random
print(random.random())--->随机生成一个大于0小于1的小数
print(random.ranint(1,5))--->随机生成一个1到5之间的整数
print(random.randrange(1,10,2))--->随机生成一个1到10之间的奇数
print(random.choice([1,'小A在哪',[4,5]])) --->随机返回一个元素,返回1或者小A在哪,[4,5]
print(random.sample([1,2,3,4,5,6],3))-->返回列表元素任意三个组合,random.sample(list,n)注意,n的值必须大于list的列表长度
随机生成一个6位数的验证码的练习:
  import random
  def ran():
    str1 = ''
   for i in range(6):#循环几次生成一个几位数的二维码
      num=random.randint(1,10)) #生成一个1-10之间的整数
      s1=chr(random.randint(65,90))#数字转化成对应的大写字母A-Z
      s2=chr(random.randint(97,122))#数字转化成对应的小写字母a-z
      s=random.choice([str(num),s1,s2])#随机列表中的一个值
      str1 += s #将每次随机返回的字符串拼接
    return str
 
三、sys 模块:sys模块是与python解释器交互的一个接口
sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
例如:print(sys.argv)--->结果为['D:/oldboy/day05/复习视频/木块.py']
sys.platform 返回操作系统平台名称一个模块能否被导入,全看在不在sys.path列表所包含的列表下

四、os模块,os模块是与操作系统交互的一个接口
删除文件夹相关的:
  os.makedirs('dirname1/dirname2')    可生成多层递归目录
  os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
  os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
文件路径相关:
  os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
  os.curdir  返回当前目录: ('.')
  os.pardir  获取当前目录的父目录字符串名:('..')
 
 
os.environ  获取系统环境变量
 
 
  os.system("bash command")  运行shell命令,直接显示
  os.popen("bash command).read()  运行shell命令,获取执行结果
os.path系列:
 
 
  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所指向的文件或者目录的最后修改时间
  os.path.getsize(path) 返回path的大小
hashlib模块:将一个字符串进行摘要运算,拿到一个固定的值,hashlib模块不是一个算法,是包含了多个算法的模块
比较常用的算法是SHA算法和Md5算法
功能:加密功能;校验文件的一致性
import hashlib
md5Obj = hashlib.md5() #实例化一个MD5摘要算法的对象
md5Obj.update('liuhaiyang'.encode('utf-8')) #使用MD5算法的对象,来操作一个字符串,注意操作的字符串必须转化为byte类型,使用encoding
a = md5Obj.hexdigest() #获取算法的结果得到一个16进制的结果
print(a)----> d0117e9ad06e29b46169e72a73c8b56c

SHA 算法:用法和md5的使用方法一样,最常用的是sha1
ret1 = hashlib.sha1()
ret1.update('liuhaiyang'.encode('utf-8'))
a = ret1.hexdigest()
print(a)------>e0ca364ff0d9b28115e7566c56a991c12954b8df

为了避免撞库加盐:md5Obj = hashlib.md5('alex'.encoding('utf-8'))
当然这种方式也不安全,就采用动态加盐 username = 'alex'

md5Obj = hashlib.md5(username.encoding('utf-8')
configparser 模块:只要处理配置文件
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '45',
'Compression': 'yes',
'CompressionLevel': '9',
'ForwardX11':'yes'
}
config['bitbucket.org'] = {'User':'hg'}
config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
with open('example.ini', 'w') as f:
config.write(f)----->生成一个配置example.ini的配置文件
 
 
print(config.sections())        #  []
config.read('example.ini')
print(config.sections()) # ['bitbucket.org', 'topsecret.server.com']
print('bytebong.com' in config) # False
print('bitbucket.org' in config) # True

print(config['bitbucket.org']["user"]) # hg
print(config['DEFAULT']['Compression']) #yes
print(config['topsecret.server.com']['ForwardX11']) #no
print(config['bitbucket.org']) #<Section: bitbucket.org>
for key in config['bitbucket.org']: # 注意,有default会默认default的键
print(key)
print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键
print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对
print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
logging模块:日志模块,一些程序执行的中间过程,以及用户行为,需要记录下来,当程序出错的时候(对内看的),方便查找
logging有两种用法:1.简单配置--不支持中文
2.使用logger对象的方式配置,该方法使用的时候更多一些!
简单配置:
import logging
logging.debug() #非常细节的操作,都记录,方便排查错误
logging.info() #正常的操作信息
logging.warning() #操作导致程序问题,但是程序可以正常运转
logging.error() #操作导致程序问题,程序不能正常运转了
logging.critical() #操作导致程序崩溃
简单配置使用:
import logging

logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')----> warning message,error message,critical message 默认输出warning级别以上的日志

import logging

logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')----> warning message,error message,critical message 默认输出warning级别以上的日志


import logging
logging.basicConfig(level=logging.DEBUG) #指定日志的输出级别
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')--->输出所有的debug信息
灵活配置日志级别,日志格式,输出位置:
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='/tmp/test.log',  
                    filemode='w')  
  
logging.debug('debug message')  
logging.info('info message')  
logging.warning('warning message')  
logging.error('error message')  
logging.critical('critical message')

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

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 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

logger对象配置:

logger = logging.getLogger()
fh = logging.FileHandle('log.log',enconding='utf-8') #创建一个可操作性的文件对象,fh
logger.addHandler(fh)
sh = logger.StreamHandle()#创建一个对象,往屏幕上输出
logger.addHandler(sh)
logger.warning('warning message')

指定日志输出格式:
logger = logging.getLogger()
'''创建一个日志输出的格式,可以指定多个格式,让屏幕和文件显示不同的日志格式'''
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#往文件中输入
fh = logging.FileHandler('log.log') #创造一个可以操作文件的对象
fh.setFormatter(formatter)
logger.addHandler(fh)#往文件里输入
sh = logging.StreamHandler()#往屏幕上输出
sh.setFormatter(formatter)
logger.addHandler(sh)
logger.warning('warning message')
 

转载于:https://www.cnblogs.com/xiaoAzaina/p/9021177.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python-turtle模块Python语言的一个标准库,它是一个基于Tkinter的Python图形库,可以用来实现海龟绘图功能。Python-turtle模块使用海龟绘图语言来绘制图形,这种语言是由Seymour Papert在上世纪80年代发明的,旨在帮助儿童学习编程。Python-turtle模块提供了一种交互式的方式来绘制图形,比较适合初学者学习。 Python-turtle模块通过创建一个画布和一个海龟对象来实现图形绘制。画布是用来显示绘制的图形的窗口,海龟对象则是用来绘制图形的工具。Python-turtle模块中提供了许多绘图函数和方法,例如`forward()`、`backward()`、`right()`、`left()`、`circle()`等,可以用来绘制线条、形状、图案等。 Python-turtle模块不仅可以进行基本的绘图,还提供了一些高级绘图功能。例如,可以使用`t.begin_fill()`和`t.end_fill()`方法来填充图形,使用`t.penup()`和`t.pendown()`方法来控制画笔的起始和结束位置,使用`t.dot()`方法来绘制点等。 总的来说,Python-turtle模块是一个非常有用的工具,它可以帮助初学者了解图形绘制的基础知识,也可以用来进行简单的图像处理。在使用Python-turtle模块时,需要注意以下几点: 1. Python-turtle模块不是Python的内置模块,需要单独安装。 2. 在使用Python-turtle模块时,需要导入turtle模块。 3. 在创建海龟对象之前,需要先创建一个画布。 4. Python-turtle模块的绘图函数和方法非常多,需要仔细学习和理解。 5. 在进行图形绘制时,需要注意海龟对象的位置和方向。 综上所述,Python-turtle模块是一个非常有用的工具,可以帮助初学者学习图形绘制和编程基础知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值