Python 为我们提供了很多功能强大的模块,今天就主要使用的到的模块进行整理,方便后面来翻阅学习。

一、时间模块

在时间模块中我们重点介绍几种自己常用的功能,主要方便我们按照自己想要的方式获取时间

  • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  • 格式化的时间字符串(Format String)
  • 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

我们先通过Python为我们提供的方法导入时间模块,并且显示一下它们的效果

  1. import time #导入时间模块
  2.  
  3. 1.时间戳的形式显示时间,通常是用在科学计算上面
  4. printtime.time())#1493279189.2479544 以秒为单位
  5. 2.结构化时间:
  6. print(time.localtime()) #本地时区的struct_time
  7. print(time.gmtime()) #UTC时区的struct_time
  8.  
  9. 显示结果:time.struct_time(tm_year=2017, tm_mon=4, tm_mday=27, tm_hour=15, tm_min=50, tm_sec=38, tm_wday=3, tm_yday=117, tm_isdst=0)
  10.  
  11. 3.格式化时间字符串;这种形式就是可以按照我们想要的形式来显示时间
  12. print(time.strftime('%Y-%m-%d %X',time.localtime()))
  13.  
  14. 输出结果为:2017-04-27 15:53:16

了解了三种时间的表示方式,接下来就有必要对这三者之间的关系进行一下转换:

  1. #--------------------------按图1转换时间
  2. # localtime([secs])
  3. # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
  4. time.localtime()
  5. time.localtime(1473525444.037215)
  6.  
  7. # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
  8.  
  9. # mktime(t) : 将一个struct_time转化为时间戳。
  10. print(time.mktime(time.localtime()))#1473525749.0
  11.  
  12. # strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
  13. # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
  14. # 元素越界,ValueError的错误将会被抛出。
  15. print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
  16.  
  17. # time.strptime(string[, format])
  18. # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
  19. print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
  20. #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
  21. # tm_wday=3, tm_yday=125, tm_isdst=-1)
  22. #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。

  1. #--------------------------按图2转换时间
  2. # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
  3. # 如果没有参数,将会将time.localtime()作为参数传入。
  4. print(time.asctime())#Sun Sep 11 00:43:43 2016
  5.  
  6. # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
  7. # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
  8. print(time.ctime()) # Sun Sep 11 00:46:38 2016
  9. print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016

对于时间模块了解这些有主要还是要载了解一个“睡觉”函数

  1. import time
  2.  
  3. time.sleep(3) # 睡觉3秒钟在执行接下来的代码

二、random 模块(这个模块呢主要是产生随机数的模块)

直接上例子哈!!!

  1. import random
  2.  
  3. print(random.random())#(0,1)----float 大于0且小于1之间的小数
  4.  
  5. print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数
  6.  
  7. print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
  8.  
  9. print(random.choice([1,'',[4,5]]))#1或者23或者[4,5]
  10.  
  11. print(random.sample([1,'',[4,5]],2))#列表元素任意2个组合
  12.  
  13. print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716
  14.  
  15. item=[1,3,5,7,9]
  16. random.shuffle(item) #打乱item的顺序,相当于"洗牌"
  17. print(item)

还记得登录的时候要输入验证码吗?其实这个东西也没有那没神秘,

  1. import random
  2. def v_code():
  3. code = ''
  4. for i in range(5):
  5. num = random.randint(0,9)
  6. alf = chr(random.randint(65,90))
  7. add = random.choice([num,alf]) # 让数字和字母进行随机的选择
  8. code += str(add)
  9. return code
  10. print(v_code())

三、os 模块

os模块呢是一个与操作系统交互的一个接口

  1. os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  2. os.chdir("dirname") 改变当前脚本工作目录;相当于shellcd
  3. os.curdir 返回当前目录: ('.')
  4. os.pardir 获取当前目录的父目录字符串名:('..')
  5. os.makedirs('dirname1/dirname2') 可生成多层递归目录
  6. os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  7. os.mkdir('dirname') 生成单级目录;相当于shellmkdir dirname
  8. os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname
  9. os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  10. os.remove() 删除一个文件
  11. os.rename("oldname","newname") 重命名文件/目录
  12. os.stat('path/filename') 获取文件/目录信息
  13. os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
  14. os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
  15. os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
  16. os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
  17. os.system("bash command") 运行shell命令,直接显示
  18. os.environ 获取系统环境变量
  19. os.path.abspath(path) 返回path规范化的绝对路径
  20. os.path.split(path) path分割成目录和文件名二元组返回
  21. os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
  22. os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
  23. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
  24. os.path.isabs(path) 如果path是绝对路径,返回True
  25. os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
  26. os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
  27. os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  28. os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  29. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  30. os.path.getsize(path) 返回path的大小

在做比较大的项目的时候,需要把不同的文件放到不同的路劲下面,这在调用的时候就会出现问题,需要对路劲进行修改,以便更好地调用文件,常用的方式主要一下两种:

  1. os路径处理
  2. #方式一:推荐使用
  3. import os
  4. #具体应用
  5. import os,sys
  6. possible_topdir = os.path.normpath(os.path.join(
  7. os.path.abspath(__file__),
  8. os.pardir, #上一级
  9. os.pardir,
  10. os.pardir
  11. ))
  12. sys.path.insert(0,possible_topdir)
  13.  
  14. #方式二:不推荐使用
  15. os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #此方式添加的路径是临时的

四 、sys模块

  1. 1 sys.argv 命令行参数List,第一个元素是程序本身路径
  2. 2 sys.exit(n) 退出程序,正常退出时exit(0)
  3. 3 sys.version 获取Python解释程序的版本信息
  4. 4 sys.maxint 最大的Int
  5. 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  6. 6 sys.platform 返回操作系统平台名称
  1. import sys,time
  2.  
  3. for i in range(50):
  4. sys.stdout.write('%s\r' %('#'*i))
  5. sys.stdout.flush()
  6. time.sleep(0.1)
  7.  
  8. '''
  9. 注意:在pycharm中执行无效,请到命令行中以脚本的方式执行
  10. '''
  11.  
  12. 进度条

五、shelve模块

shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型

  1. import shelve
  2.  
  3. f=shelve.open(r'sheve.txt')
  4. # f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
  5. # f['stu2_info']={'name':'gangdan','age':53}
  6. # f['school_info']={'website':'http://www.pypy.org','city':'beijing'}
  7.  
  8. print(f['stu1_info']['hobby'])
  9. f.close()
  10.  
  11. 输出结果为:['piao', 'smoking', 'drinking']

六、xml 模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单。

xml的格式如下,就是通过<>节点来区别数据结构的:

  1. <?xml version="1.0"?>
  2. <data>
  3. <country name="Liechtenstein">
  4. <rank updated="yes">2</rank>
  5. <year>2008</year>
  6. <gdppc>141100</gdppc>
  7. <neighbor name="Austria" direction="E"/>
  8. <neighbor name="Switzerland" direction="W"/>
  9. </country>
  10. <country name="Singapore">
  11. <rank updated="yes">5</rank>
  12. <year>2011</year>
  13. <gdppc>59900</gdppc>
  14. <neighbor name="Malaysia" direction="N"/>
  15. </country>
  16. <country name="Panama">
  17. <rank updated="yes">69</rank>
  18. <year>2011</year>
  19. <gdppc>13600</gdppc>
  20. <neighbor name="Costa Rica" direction="W"/>
  21. <neighbor name="Colombia" direction="E"/>
  22. </country>
  23. </data>

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:

  1. import xml.etree.ElementTree as ET
  2.  
  3. tree = ET.parse("xmltest.xml")
  4. root = tree.getroot()
  5. print(root.tag)
  6.  
  7. #遍历xml文档
  8. for child in root:
  9. print('========>',child.tag,child.attrib,child.attrib['name'])
  10. for i in child:
  11. print(i.tag,i.attrib,i.text)
  12.  
  13. #只遍历year 节点
  14. for node in root.iter('year'):
  15. print(node.tag,node.text)
  16. #---------------------------------------
  17.  
  18. import xml.etree.ElementTree as ET
  19.  
  20. tree = ET.parse("xmltest.xml")
  21. root = tree.getroot()
  22.  
  23. #修改
  24. for node in root.iter('year'):
  25. new_year=int(node.text)+1
  26. node.text=str(new_year)
  27. node.set('updated','yes')
  28. node.set('version','1.0')
  29. tree.write('test.xml')
  30.  
  31. #删除node
  32. for country in root.findall('country'):
  33. rank = int(country.find('rank').text)
  34. if rank > 50:
  35. root.remove(country)
  36.  
  37. tree.write('output.xml')

自己创建xml文档:

  1. import xml.etree.ElementTree as ET
  2.  
  3. new_xml = ET.Element("namelist")
  4. name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
  5. age = ET.SubElement(name,"age",attrib={"checked":"no"})
  6. sex = ET.SubElement(name,"sex")
  7. sex.text = ''
  8. name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
  9. age = ET.SubElement(name2,"age")
  10. age.text = ''
  11.  
  12. et = ET.ElementTree(new_xml) #生成文档对象
  13. et.write("test.xml", encoding="utf-8",xml_declaration=True)
  14.  
  15. ET.dump(new_xml) #打印生成的格式

七、configparser模块

  1. #!/usr/bin /env python
  2. import configparser
  3. config = configparser.ConfigParser()
  4. config.read('a.txt', encoding='utf-8')
  5. ret = config.sections() #获取所有节点名
  6. print(ret)
  7.  
  8. ret = config.options('test1') #获取指定节点下的key
  9. print(ret)
  10.  
  11. ret = config.get('test1', 'k1') #获取指定节点下的值
  12. print(ret)
  13.  
  14. has = config.has_section('test1') #验证是否包含节点
  15. print(has)
  16.  
  17. has = config.has_section('tttt1') #验证是否包含节点
  18. print(has)
  19.  
  20. config.add_section('tttt1') #加节点(节点不可以存在)
  21. config.write(open('a.txt', 'w', encoding='utf-8'))
  22.  
  23. config.remove_section('tttt1') #删节点(节点存在)
  24. config.write(open('a.txt', 'w', encoding='utf-8'))
  25.  
  26. has = config.has_option('tttt1', 'k1') #验证是否包含节点内的key
  27. print(has)
  28.  
  29. config.add_option('tttt1', 'k1') #加节点内key(节点存在)
  30. config.write(open('a.txt', 'w'))
  31.  
  32. config.remove_option('tttt1', 'k1') #删节点内key(节点存在)
  33. config.write(open('a.txt', 'w'))

八、logging模块

用于便捷记录日志且线程安全的模块

1、单文件日志

  1. import logging
  2.  
  3. logging.basicConfig(filename='log.log',
  4. format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
  5. datefmt='%Y-%m-%d %H:%M:%S %p',
  6. level=10)
  7.  
  8. logging.debug('debug')
  9. logging.info('info')
  10. logging.warning('warning')
  11. logging.error('error')
  12. logging.critical('critical')
  13. logging.log(10,'log')

日志等级:

  1. CRITICAL = 50
  2. FATAL = CRITICAL
  3. ERROR = 40
  4. WARNING = 30
  5. WARN = WARNING
  6. INFO = 20
  7. DEBUG = 10
  8. NOTSET = 0

2、多文件日志

对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。

  1. # 定义文件
  2. file_1_1 = logging.FileHandler('l1_1.log', 'a', encoding='utf-8')
  3. fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")
  4. file_1_1.setFormatter(fmt)
  5.  
  6. file_1_2 = logging.FileHandler('l1_2.log', 'a', encoding='utf-8')
  7. fmt = logging.Formatter()
  8. file_1_2.setFormatter(fmt)
  9.  
  10. # 定义日志
  11. logger1 = logging.Logger('s1', level=logging.ERROR)
  12. logger1.addHandler(file_1_1)
  13. logger1.addHandler(file_1_2)
  14.  
  15. # 写日志
  16. logger1.critical('')
  17.  
  18. 日志一
  19. # 定义文件
  20. file_2_1 = logging.FileHandler('l2_1.log', 'a')
  21. fmt = logging.Formatter()
  22. file_2_1.setFormatter(fmt)
  23.  
  24. # 定义日志
  25. logger2 = logging.Logger('s2', level=logging.INFO)
  26. logger2.addHandler(file_2_1)
  27.  
  28. 日志(二)

如上述创建的两个日志对象

  • 当使用【logger1】写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中
  • 当使用【logger2】写日志时,会将相应的内容写入 l2_1.log 文件中

自己写一个可以调用的日志模式:

  1. import logging
  2. def logger():
  3. logger = logging.getLogger() #创建了一个logger对象
  4. fh = logging.FileHandler('test')#将日志文件输出到文件内
  5. ch = logging.StreamHandler() #将日志信息输出到屏幕上
  6. fm = logging.Formatter('%(asctime)s %(message)s')#写出日志输出的格式
  7. fh.setFormatter(fm)
  8. ch.setFormatter(fm)
  9. logger.addHandler(fh)
  10. logger.addHandler(ch)
  11. logger.setLevel('DEBUG')
  12. return logger
  13.  
  14. logger =logger()
  15. logger.info([12,34,45,]) #2017-04-24 15:28:29,749 [12, 34, 45]

Python 基础 常用模块的更多相关文章

  1. python基础----常用模块

    一 time模块(时间模块)★★★★                                                      时间表现形式 在Python中,通常有这三种方式来表示时 ...

  2. python基础--常用模块与面向对象基础

    1常用模块 1.1 xml xml是实现不同语言或程序之间进行数据交换的协议 xml的格式如下: <?xml version="1.0"?> <data> ...

  3. Python自动化 【第五篇】:Python基础-常用模块

    目录 模块介绍 time和datetime模块 random os sys shutil json和pickle shelve xml处理 yaml处理 configparser hashlib re ...

  4. Python基础-常用模块OS

    模块:一个python文件就是一个模块,模块分三种: 1,标准模块,也就是python自带的模块,例如import  time,random,string等等 2,第三方模块,这种模块需要自己安装才能 ...

  5. python基础——第三方模块

    python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的.  如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了.  如果你正在使用Window ...

  6. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  7. python基础——使用模块

    python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  8. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  9. python 基础之 模块

    Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...

随机推荐

  1. HikariCP重要参数配置

    概述 HikariCP是Spring Framework 5.0的默认数据库连接池,这得益于他的高性能.但是如果配置不当,数据库连接池也可能因影响到系统性能. 重要参数 maximum-pool-si ...

  2. Java中获取刚插入数据库中的数据Id(主键,自动增长)

    public int insert(String cName, String ebrand, String cGender) { String sql = "insert into Clot ...

  3. 构造函数语义学——Default Constructor篇

    构造函数语义学--Default Constructor 篇 这一章原书主要分析了:编译器关于对象构造过程的干涉,即在对象构造这个过程中,编译器到底在背后做了什么 这一章的重点在于 default c ...

  4. 通过反射对任意class类中方法赋值的方式

    import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;i ...

  5. Hadoop和YARN :map+shuffle+reduce走读

    今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...

  6. phpstorm 设置换行符的格式

    菜单 >  文件 > 设置

  7. 【css】CSS设置文字不能被选中

    CSS设置文字不能被选中 /*设置文字不能被选中 以下为css样式*/ -webkit-user-select:none; -moz-user-select:none; -ms-user-select ...

  8. opencv实践::对象提取与测量

    问题描述 照片是来自太空望远镜的星云图像,科学家想知道它的面 积与周长. 解决思路 方法一: 通过二值分割+图像形态学+轮廓提取 #include <opencv2/opencv.hpp> ...

  9. .Net Core3.0 配置Configuration

    准备 .NET core和.NET项目配置上有了很大的改变,支持的也更加丰富了比如命令行,环境变量,内存中.NET对象,设置文件等等..NET项目我们常常把配置信息放到webConfig 或者appC ...

  10. Git & Github 使用教程【1】入门篇

    Github教程 1-1 版本管理工具简介 主要作用:备份文件.记录历史.回到过去.多端共享.独挡一面.团队协作 2-1 版本管理工具发展历史 3-1 Git下载和安装[略] 3-2 linux下安装 ...