1. 模块介绍
  2. time &datetime模块
  3. random
  4. os
  5. sys
  6. shutil
  7. shelve
  8. xml处理
  9. yaml处理
  10. configparser
  11. hashlib
  12. re正则表达式
  13. logging模块

1、模块:

定义:其实模块简单说就是一堆代码实现某个功能,它们是已经写好的.py文件。只需要用import应用即可。

分类:

      1、自定义模块

      2、内置标准模块(又称标准库)

      3、开源模块

          1、自定义模块,就是自己写的.py文件为了实现某个功能。

          2、内置模块,就是python自身已经写好的某个功能,例如经常用的sys、os等模块都是内置模块。

          3、开源模块,开源大家都明白吧,就是不收费的别人写好的模块,一般也称第三方模块。

模块的引用:

      1、import modules

      2、from modules import  函数

      3、如果有多个模块,可以用逗号隔开,如果想把某个模块里面的所有功能都导入,可以用*,这样的话功能都加载道内存里面,占用内存资源,不建议用。

2、time &datetime模块

  1. #!/usr/bin/env python
  2. #—*—coding:utf-8—*—
  3.  
  4. # time和datetime
  5.  
  6. import time,datetime
  7.  
  8. ###time
  9. # print(time.process_time())#返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来
  10. # >>>0.09375
  11.  
  12. # print(time.altzone)#返回与utc时间的时间差,以秒计算\
  13. # >>>-32400
  14.  
  15. # print(time.asctime()) #返回时间格式"Mon Aug 22 09:31:43 2016",
  16. # >>>Mon Aug 22 09:31:43 2016
  17.  
  18. # print(time.localtime())
  19. # >>>time.struct_time(tm_year=2016, tm_mon=8, tm_mday=22, tm_hour=9, tm_min=32, tm_sec=28, tm_wday=0, tm_yday=235, tm_isdst=0)
  20. #tm_year(年),tm_mon(月),tm_mday(日),tm_hour(时),tm_min(分),tm_sec(秒),tm_wday(星期,从0到6,0代表周一,一次类推),tm_yday(这一年中的地几天),tm_isdst(夏令时间标志)
  21.  
  22. # print(time.time())#(获取时间戳)
  23. # a = time.time()
  24. # b = a/3600/24/365
  25. # print(b)
  26. # >>>46.67149458666888
  27. # 2016-1970
  28. # >>>46
  29. #时间是村1970年开始算,为什么时间要从1970年开始算呢
  30. #1970年1月1日 算 UNIX 和 C语言 生日. 由于主流计算机和操作系统都用它,其他仪器,手机等也就用它了.
  31.  
  32. # print(time.gmtime(time.time()-800000))#返回utc时间的struc时间对象格式
  33. # >>>time.struct_time(tm_year=2016, tm_mon=8, tm_mday=12, tm_hour=20, tm_min=9, tm_sec=14, tm_wday=4, tm_yday=225, tm_isdst=0)
  34.  
  35. # print(time.asctime(time.localtime()))
  36. # >>>Mon Aug 22 10:23:52 2016
  37. # print(time.ctime())
  38. # >>>Mon Aug 22 10:24:25 2016
  39.  
  40. # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d")#将时间字符串转换成struct时间对象格式
  41. # print(string_2_struct)
  42. # >>>time.struct_time(tm_year=2016, tm_mon=5, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=143, tm_isdst=-1)
  43.  
  44. # string_3_struct = time.strptime("2016/05/22","%Y/%m/%d")
  45. # struct_2_stamp = time.mktime(string_3_struct) #将struct时间对象转成时间戳
  46. # print(struct_2_stamp)
  47. # >>>1463846400.0
  48.  
  49. #print(time.gmtime(time.time()-86640))##将utc时间戳转换成struct_time格式
  50. #>>>time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=2, tm_min=25, tm_sec=14, tm_wday=6, tm_yday=234, tm_isdst=0)
  51.  
  52. # a = time.timezone
  53. # print(a/3600)
  54. # >>>-8.0东八区
  55.  
  56. # time.sleep()#睡几秒
  57.  
  58. # time.localtime()#当前本地时间
  59.  
  60. #strftime()#重要!
  61. # a = time.localtime()#将本地时间格式化
  62. # time = time.strftime("%Y/%m/%d %H:%M:%S",a)
  63. # print(time)
  64. # >>>2016/08/22 10:31:07
  65. # 前
  66. # 前后刚好相反
  67. # 后
  68. # # time.strptime()#前后一定要位置一一对应(注意符号空格)
  69. # time1 = time.strptime("2016-08:20 14:31:52","%Y-%m:%d %H:%M:%S")
  70. # print(time1)
  71.  
  72. #####datetime(时间的加减)
  73.  
  74. # print(datetime.datetime.now()) #返回 2016-08-22 10:33:53.290793
  75.  
  76. # print(datetime.date.fromtimestamp(time.time()) ) #2016-08-22
  77.  
  78. # print(datetime.datetime.now() )#2016-08-22 10:34:37.885578当前时间一般使用这个
  79.  
  80. # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天#2016-08-25 10:35:38.554216
  81.  
  82. # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天#2016-08-19 10:35:58.064103
  83.  
  84. # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时#2016-08-22 13:36:16.540940
  85.  
  86. # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分#2016-08-22 11:06:34.837476
  87.  
  88. # c_time = datetime.datetime.now()
  89. # print(c_time.replace(minute=3,hour=2)) #时间替换

3、random

  1. #!/usr/bin/env python
  2. #—*—coding:utf-8—*—
  3.  
  4. import random
  5.  
  6. #随机数
  7. # print(random.random())#0到的随机数,是一个float浮点数
  8. # print(random.randint(1,2))#一和二随机
  9. # print(random.randrange(1,10))#一到十随机(记得range只有头没有尾巴)
  10. #
  11. # 生成随机验证码
  12. #
  13. # checkcode=''
  14. # for i in range(5):
  15. # current = random.randrange(0,5)
  16. # if current == i:
  17. # tmp = chr(random.randint(65,90))#chr是ascii码表,65,90是(A-Z)
  18. # else:
  19. # tmp = random.randint(0,9)
  20. # checkcode +=str(tmp)
  21. # print(checkcode)
  22.  
  23. #二般
  24. import string
  25. # print(''.join(random.sample(string.ascii_lowercase+string.digits,5)))#随机验证码可用(5位含数字和密码)
  26. #
  27. # print(''.join(random.sample(string.ascii_lowercase+string.digits,5)))#随机验证码可用(5位含数字和密码)
  28. #
  29. # #打印a-z
  30. # print(string.ascii_lowercase)#一
  31. # #打印A-Z
  32. # print(string.ascii_letters)#二

4、os

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

5、sys

  1. #!/usr/bin/env python
  2. #—*—coding:utf-8—*—
  3. import sys
  4. # print(sys.argv ) #命令行参数List,第一个元素是程序本身路径
  5. #>>>['E:/python/day5/sys(1).py']
  6.  
  7. # sys.exit(n) #退出程序,正常退出时exit(0)
  8.  
  9. # print(sys.version ) #获取Python解释程序的版本信息
  10. # >>>3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)]
  11.  
  12. # print(sys.maxint) #最大的Int值
  13. # sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  14. # print(sys.platform) #返回操作系统平台名称
  15. # >>>win32
  16.  
  17. # print(sys.stdout.write('please:'))
  18. # >>>please:7
  19.  
  20. # val = sys.stdin.readline()[:-1]

6、shutil

  1. #!/usr/bin/env python
  2. import shutil
  3.  
  4. # shutil.copyfileobj(fsrc, fdst[, length])
  5. # 将文件内容拷贝到另一个文件中,可以部分内容
  6.  
  7. # shutil.copyfile(src, dst)
  8. # 拷贝文件
  9.  
  10. # shutil.copymode(src, dst)
  11. # 仅拷贝权限。内容、组、用户均不变
  12.  
  13. # shutil.copystat(src, dst)
  14. # 拷贝状态的信息,包括:mode bits, atime, mtime, flags
  15.  
  16. # shutil.copy(src, dst)
  17. # 拷贝文件和权限
  18.  
  19. # shutil.copy2(src, dst)
  20. # 拷贝文件和状态信息
  21.  
  22. # shutil.rmtree(path[, ignore_errors[, onerror]])
  23. # 递归的去删除文件
  24.  
  25. # shutil.move(src, dst)
  26. # 递归的去移动文件(删除文件)
  27.  
  28. shutil.make_archive(base_name, format,...)
  29.  
  30. 创建压缩包并返回文件路径,例如:ziptar
  31.  
  32. base_name 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
  33. 如:www =>保存至当前路径
  34. 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
  35. format 压缩包种类,“zip”, tar”, bztar”,“gztar
  36. root_dir 要压缩的文件夹路径(默认当前目录)
  37. owner 用户,默认当前用户
  38. group 组,默认当前组
  39. logger 用于记录日志,通常是logging.Logger对象
  40.  
  41. #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
  42.  
  43. import shutil
  44. ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
  45.  
  46. #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
  47. import shutil
  48. ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

7、shelve

  1. import shelve
  2. d = shelve.open('shelve_test')
  3.  
  4. #写
  5. # name = {"zhangsan","lisi","wanger"}
  6. # info = {"age":25,"job":"IT"}
  7. # d["name"] = name
  8. # d["info"] = info
  9. # d.close()
  10. #写完以后,它会自动生成三个文件,.dat和.dir和.bak
  11.  
  12. #读
  13. # print(d.get("name"))
  14. # print(d.get("info"))

8、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>
  1. #!/usr/bin/env python
  2. #—*—coding:utf-8—*—
  3.  
  4. import xml.etree.ElementTree as ET
  5.  
  6. tree = ET.parse("xml.xml")
  7. root = tree.getroot()
  8. print(root.tag)
  9.  
  10. #遍历xml文档
  11. # for child in root:
  12. # print(child.tag, child.attrib)
  13. # for i in child:
  14. # print(i.tag,i.text)
  15. #>>>结果
  16. # data
  17. # country {'name': 'Liechtenstein'}
  18. # rank 2
  19. # year 2008
  20. # gdppc 141100
  21. # neighbor None
  22. # neighbor None
  23. # country {'name': 'Singapore'}
  24. # rank 5
  25. # year 2011
  26. # gdppc 59900
  27. # neighbor None
  28. # country {'name': 'Panama'}
  29. # rank 69
  30. # year 2011
  31. # gdppc 13600
  32. # neighbor None
  33. # neighbor None
  34.  
  35. #只遍历year 节点
  36. # for node in root.iter('year'):
  37. # print(node.tag,node.text)
  38. # >>>data
  39. # >>>year2008
  40. # >>>year 2011
  41. # >>>year 2011

9、yaml处理

  yaml和xml差不多,只是需要自己安装一个模块,参考链接:参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation

10、configparser

  这个比较好玩一点,大家多知道mysql配置文件my.cnf文件的格式吧

  1. #类似这样的配置文件,一块一块的分类
  2. [DEFAULT]
  3. ServerAliveInterval = 45
  4. Compression = yes
  5. CompressionLevel = 9
  6. ForwardX11 = yes
  7.  
  8. [bitbucket.org]
  9. User = hg
  10.  
  11. [topsecret.server.com]
  12. Port = 50022
  13. ForwardX11 = no
  1. #生成类似格式的文件
  2. import configparser
  3.  
  4. config = configparser.ConfigParser()
  5. config["DEFAULT"] = {'ServerAliveInterval': '',
  6. 'Compression': 'yes',
  7. 'CompressionLevel': ''}
  8.  
  9. config['bitbucket.org'] = {}
  10. config['bitbucket.org']['User'] = 'hg'
  11. config['topsecret.server.com'] = {}
  12. topsecret = config['topsecret.server.com']
  13. topsecret['Host Port'] = '' # mutates the parser
  14. topsecret['ForwardX11'] = 'no' # same here
  15. config['DEFAULT']['ForwardX11'] = 'yes'
  16. with open('example.ini', 'w') as configfile:
  17. config.write(configfile)
  1. #读
  2. # import configparser
  3. # config = configparser.ConfigParser()
  4. # config.sections()
  5. #
  6. # config.read('example.ini')
  7. #
  8. # print(config.defaults())
  9. # >>>OrderedDict([('compressionlevel', '9'), ('compression', 'yes'), ('serveraliveinterval', '45'), ('forwardx11', 'yes')])
  10. # print(config['bitbucket.org']["User"])
  11. # >>>hg
  12. # print(config["topsecret.server.com"]["host port"])
  13. #
  1. #删除(创建一个新文件,并删除bitbucket.org)
  2. import configparser
  3. config = configparser.ConfigParser()
  4. config.sections()
  5.  
  6. config.read('example.ini')
  7. rec = config.remove_section("bitbucket.org")#删除该项
  8. config.write(open("example.cfg","w"))
  9. [DEFAULT]
  10. compressionlevel = 9
  11. compression = yes
  12. serveraliveinterval = 45
  13. forwardx11 = yes
  14.  
  15. [topsecret.server.com]
  16. host port = 50022
  17. forwardx11 = no

11、hashlib

  1. #!/usr/bin/env python
  2.  
  3. import hashlib
  4.  
  5. # m = hashlib.md5()
  6. # m.update(b"hello")
  7. # print(m.digest())#进行二进制加密
  8. # print(len(m.hexdigest())) #16进制长度
  9. # print(m.hexdigest())#16进制格式hash
  10. # >>>b']A@*\xbcK*v\xb9q\x9d\x91\x10\x17\xc5\x92'
  11. # >>>32
  12. # >>>5d41402abc4b2a76b9719d911017c592
  13.  
  14. #md5
  15. # hash = hashlib.md5()
  16. # hash.update(('admin').encode())
  17. # print(hash.hexdigest())
  18. # >>>21232f297a57a5a743894a0e4a801fc3
  19.  
  20. #sha1
  21. # hash = hashlib.sha1()
  22. # hash.update(('admin').encode())
  23. # print(hash.hexdigest())
  24. # >>>d033e22ae348aeb5660fc2140aec35850c4da997
  25.  
  26. #sha256
  27. # hash = hashlib.sha256()
  28. # hash.update(('admin').encode())
  29. # print(hash.hexdigest())
  30. # >>>8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
  31.  
  32. #sha384
  33. # hash = hashlib.sha384()
  34. # hash.update(('admin').encode())
  35. # print(hash.hexdigest())
  36. # >>>9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782
  37.  
  38. #sha512
  39. # hash = hashlib.sha512()
  40. # hash.update(('admin').encode())
  41. # print(hash.hexdigest())
  42. # >>>c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
  43.  
  44. #更吊的
  45. import hmac
  46. h = hmac.new(('wueiqi').encode())
  47. h.update(('hellowo').encode())
  48. print(h.hexdigest())
  49. #更多关于md5,sha1,sha256等介绍的文章看这里https://www.tbs-certificates.co.uk/FAQ/en/sha256.html

12、re正则表达式

  1. # #!/usr/bin/env python
  2. #
  3. # '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
  4. # '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
  5. # '$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
  6. # '*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a']
  7. # '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
  8. # '?' 匹配前一个字符1次或0次
  9. # '{m}' 匹配前一个字符m次
  10. # '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
  11. # '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
  12. # '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
  13. #
  14. #
  15. # '\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
  16. # '\Z' 匹配字符结尾,同$
  17. # '\d' 匹配数字0-9
  18. # '\D' 匹配非数字
  19. # '\w' 匹配[A-Za-z0-9]
  20. # '\W' 匹配非[A-Za-z0-9]
  21. # 's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
  22. #
  23. # '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}
  24.  
  25. #常用的匹配方法
  26. # re.match 从头开始匹配
  27. # re.search 匹配包含
  28. # re.findall 把所有匹配到的字符放到以列表中的元素返回
  29. # re.splitall 以匹配到的字符当做列表分隔符
  30. # re.sub 匹配字符并替换
  31.  
  32. # 仅需轻轻知道的几个匹配模式
  33. #
  34. # re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
  35. # M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
  36. # S(DOTALL): 点任意匹配模式,改变'.'的行为
  1. re.match是从头开始的
  2.  
  3. 1 #正则表达式的练习
  4. import re
  5. >>> re.match("^baidu","baidu.com")
  6. <_sre.SRE_Match object; span=(0, 5), match='baidu'>#match就是匹配到的结果,如果没有返回,就证明没有匹配到
  1. >>> ret = re.match("^www\d","www123baidu456")#一个\d表示匹配后面的一个数字
  2. >>> ret.group()
  3. 'www1'
  4. >>> ret = re.match("^www\d+","www123baidu456")#加上一个+代表匹配后面紧跟着的所有数字
  5. >>> ret.group()
  6. 'www123'#如果没有就是None
  1. >>> re.match(".","www123baidu456")#匹配一个字符
  2. <_sre.SRE_Match object; span=(0, 1), match='w'>
  3. >>> re.match(".+","www123baidu456")#加上一个加就匹配所有了
  4. <_sre.SRE_Match object; span=(0, 14), match='www123baidu456'>

re.search

  1. >>> re.match(".","www123baidu456")#语法二,查找
  2. <_sre.SRE_Match object; span=(0, 1), match='w'>
  3. >>> re.match(".+","www123baidu456")
  4. <_sre.SRE_Match object; span=(0, 14), match='www123baidu456'>
  1. >>> re.search("@.+@$","123@baidu@")#匹配某个关键字中间(包含关键字)
  2. <_sre.SRE_Match object; span=(3, 10), match='@baidu@'>
  1. ?#匹配次或0
  1. 1 re.search("b?","bbbaidu")
  2. <_sre.SRE_Match object; span=(0, 1), match='b'>
  3. >>> re.search("b?","aidu")#?前面的可以有,也可以没有,没有就匹配后面的
  4. <_sre.SRE_Match object; span=(0, 0), match=''>
  1. >>> re.search("[0-9]{4}","daf123bbbk4567")#{4}代表连续几个数字
  2. <_sre.SRE_Match object; span=(10, 14), match=''>

换个套路,如果我想匹配字符串里面所有的数字或者字母呢

  1. >>> re.findall("[0-9]{1,3}","daf34dkafjl675kdla98dfasfa536")
  2. ['', '', '', '']
  3.  
  4. >>> re.findall("[0-9]{1,2}","daf34dkafjl675kdla98dfasfa536")
  5. ['', '', '', '', '', '']
  6.  
  7. >>> re.findall("[0-9]{1,5}","daf34dkafjl675kdla98dfasfa536")
  8. ['', '', '', '']
  9.  
  10. >>> re.findall("[0-9]{1}","daf34dkafjl675kdla98dfasfa536")
  11. ['', '', '', '', '', '', '', '', '', '']
  12.  
  13. >>> re.findall("[0-9]{1,4}","daf34dkafjl675kdla98dfasfa536")
  14. ['', '', '', '']

  

>>> re.findall("[0-9]{3}","daf34dkafjl675kdla98dfasfa536")
['675', '536']

  1. #换个方法|(或)
  2. >>> re.search("abc|ABC","ABCabc").group()
  3. 'ABC'
  4. >>> re.findall("abc|ABC","ABCabc")
  5. ['ABC', 'abc']
  1. #分组匹配
  2. >>> re.search("(abc){2}","ddddabccdfabc")#需要连续两个abc才能匹配到,见下面
  3. >>> re.search("(abc){2}","ddddabcabc")
  4. <_sre.SRE_Match object; span=(4, 10), match='abcabc'>
  1. #转意符
  2. >>> re.search("(abc){2}\|","ddddabcabc|")#告诉python管道符在这里不是管道符就是一个竖杠用\转
  3. <_sre.SRE_Match object; span=(4, 11), match='abcabc|'>
  1. #分组转意
  2. >>> re.search("(abc){2}\|\|=","ddddabcabc||=")
  3. <_sre.SRE_Match object; span=(4, 13), match='abcabc||='>
  4.  
  5. >>> re.search("(abc){2}(\|\|=){2}","ddddabcabc||=||=")#还是因为管道符在正则表达式里面是或的意思,两个管道符都需要转意
  6. <_sre.SRE_Match object; span=(4, 16), match='abcabc||=||='>
  1. #分割split
  2. >>> re.split("[0-9]","abc123dfe456gjkd")
  3. ['abc', '', '', 'dfe', '', '', 'gjkd']
  4. >>> re.split("[0-9]+","abc123dfe456gjkd")
  5. ['abc', 'dfe', 'gjkd']
  1. #sub替换
  2. >>> re.sub("[0-9]","|","abc123dfe456gjkd")
  3. 'abc|||dfe|||gjkd'
  4. >>> re.sub("[0-9]","|","abc123dfe456gjkd",count=2)
  5. 'abc||3dfe456gjkd'
  1. #反斜杠\
  2. >>> re.search(r"\\","jdkafkdl\\dafd")
  3. <_sre.SRE_Match object; span=(8, 9), match='\\'>

  

  1. #re.I#忽略大小写
  2. >>> re.search("[a-z]+","abcdHJ",flags=re.I)
  3. <_sre.SRE_Match object; span=(0, 6), match='abcdHJ'>
  4.  
  5. #多行模式flags = re.m(匹配去掉换行继续匹配\n不)
  6. >>> re.search("[a-z]+","\nabcdHJ",flags=re.M)
  7. <_sre.SRE_Match object; span=(1, 5), match='abcd'>
  8.  
  9. #匹配任意字符
  10. >>> re.search(".+","\nabcdHJ",flags=re.S)
  11. <_sre.SRE_Match object; span=(0, 7), match='\nabcdHJ'>

13、logging模块

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

  1. import logging
  2.  
  3. logging.basicConfig(filename='log.log',
  4. format='%(asctime)s - %(name)s - %(levelname)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

  注意:只有大于当前日志等级的操作才会被记录。

日志格式:

%(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:用户输出的消息

Python之路-python(常用模块学习)的更多相关文章

  1. Python 之路 Day5 - 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  2. Python之路,Day5 - 常用模块学习 (转载Alex)

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  3. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  4. Python成长之路(常用模块学习)

    Python 拥有很多很强大的模块 主要写一下常用的几个吧 大概就是这些内容了 模块介绍 time &datetime模块 random os sys shutil json & pi ...

  5. python 之路 day5 - 常用模块

    模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser has ...

  6. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  7. 第六章:Python基础の反射与常用模块解密

    本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...

  8. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  9. 自学Python之路-Python核心编程

    自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块       6.1 自学Python6.1-模块简介    6.2 自学Python6.2-类.模块.包  ...

  10. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

随机推荐

  1. mongodb新手入门,mongodb命令学习

    下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...

  2. ACM 对决

    对决 时间限制:1000 ms  |  内存限制:65535 KB 难度:0   描述 Topcoder要招进来了 n 个新同学,Yougth计划把这个n个同学分成两组,要求每组中每个人必须跟另一组中 ...

  3. linux 中修改root的密码

    修改root密码 有的时候会出现忘记了root 用户密码的情况,再次我们可以通过进入single(单)用户模式,将root的密码重新设置,然后重启登录即可. 具体流程: 1.先登录root用户(密码已 ...

  4. RTC实时时钟

    作者:宋老师,华清远见嵌入式学院讲师. 1.1 RTC介绍 在 一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备 ...

  5. java枚举使用详解

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...

  6. [转]关于event的两个常被忽略的api:isDefaultPrevented()和preventDefault()

    今天在robert penner(as3 singal的作者)的一篇blog文中顺藤摸瓜到了darron schall的另外一篇blog文(Creating Default, Cancelable E ...

  7. 李洪强漫谈iOS开发[C语言-046]-统计输入字符个数

  8. struts2中用xml配置文件去验证填写信息

    xml名字是这样的 actionName-validation.xml 每个action 对应一个xml文件 xml文件和action放在同一个包下 后台验证用户输入是否符合格式要求,不符合,提交后返 ...

  9. c# 结构体、枚举类型及函数调用

    一.结构体 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 枚举类型和结构体都属于值类型. 二.枚举类型 1.枚举类型之针对字符串,对于索引,无意义2.常量的集合,这些常 ...

  10. NGUI事件监听之UIEventListener的使用

    NGUI的事件绑定可以使用 UIButtonMessage 在一个游戏对象上添加Button Message组件: 在Button Message组件上添加要通知的游戏对象上所挂载的脚本的方法 Tar ...