zoukankan      html  css  js  c++  java
  • Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名。

    一、time & datetime模块

     1 import time
     2 import datetime
     3 
     4 print(time.asctime())      # 返回时间格式:Sun May  7 21:46:15 2017
     5 print(time.time())         # 返回时间戳 ‘1494164954.6677325’
     6 print(time.gmtime())       # 返回本地时间 的struct time对象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0)
     7 print(time.localtime())    # 返回本地时间 的struct time对象格式,time.struct_time(tm_year=2017, tm_mon=5, tm_mday=7, tm_hour=22, tm_min=4, tm_sec=53, tm_wday=6, tm_yday=127, tm_isdst=0)
     8 print(time.gmtime(time.time()-800000))   # 返回utc时间的struc时间对象格式
     9 print(time.asctime(time.localtime()))    # 返回时间格式Sun May  7 22:15:09 2017
    10 print(time.ctime())                      # 返回时间格式Sun May  7 22:15:09 2017
    11 print(time.strftime('%Y-%m-%d'))         #默认当前时间 2017-05-07
    12 print(time.strftime('%Y-%m-%d',time.localtime())) #默认当前时间 2017-05-07
    13 
    14 string_struct = time.strptime("2016/05/22","%Y/%m/%d") # 将日期字符串 转成 struct时间对象格式
    15 print(string_struct)                     # 返回struct time对象格式 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)
    16 
    17 # 将日期字符串转成时间戳
    18 struct_stamp = time.mktime(string_struct) # 将struct time时间对象转成时间戳
    19 print(struct_stamp)                         # 返回时间戳 ‘1463846400.0’
    20 
    21 # 将时间戳转为字符串格式
    22 print(time.gmtime(time.time()-86640))         # 将utc时间戳转换成struct_time格式
    23 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) # 将utc struct_time格式转成指定的字符串格式
    24 
    25 
    26 # 时间加减
    27 print(datetime.datetime.now())           # 返回当前时间 2017-05-07 22:36:45.179732
    28 print(datetime.date.fromtimestamp(time.time()))  # 时间戳直接转换成日期格式 2017-05-07
    29 print(datetime.datetime.now() + datetime.timedelta(3))    # 返回时间在当前日期上 +3 天
    30 print(datetime.datetime.now() + datetime.timedelta(-3))    # 返回时间在当前日期上 -3 天
    31 print(datetime.datetime.now() + datetime.timedelta(hours= 3)) # 返回时间在当前时间上 +3 小时
    32 print(datetime.datetime.now() + datetime.timedelta(minutes= 30)) # 返回时间在当前时间上 +30 分钟
    33 
    34 c_time  = datetime.datetime.now()
    35 print(c_time)                          # 当前时间为 2017-05-07 22:52:44.016732
    36 print(c_time.replace(minute=3,hour=2)) # 时间替换 替换时间为‘2017-05-07 02:03:18.181732’
    37 
    38 print(datetime.timedelta)      # 表示时间间隔,即两个时间点之间的长度
    39 print (datetime.datetime.now() - datetime.timedelta(days=5))  # 返回时间在当前时间上 -5 天
    40 
    41 # python 日历模块
    42 import calendar
    43 
    44 print(calendar.calendar(theyear= 2017))     # 返回2017年整年日历
    45 print(calendar.month(2017,5))               # 返回某年某月的日历,返回类型为字符串类型
    46 
    47 calendar.setfirstweekday(calendar.WEDNESDAY) # 设置日历的第一天(第一天以星期三开始)
    48 cal = calendar.month(2017, 4)
    49 print (cal)
    50 
    51 print(calendar.monthrange(2017,5))        # 返回某个月的第一天和这个月的所有天数
    52 print(calendar.monthcalendar(2017,5))     # 返回某个月以每一周为元素的序列
    53 
    54 cal = calendar.HTMLCalendar(calendar.MONDAY)
    55 print(cal.formatmonth(2017, 5))           # 在html中打印某年某月的日历
    56 
    57 print(calendar.isleap(2017))             # 判断是否为闰年
    58 print(calendar.leapdays(2000,2017))       # 判断两个年份间闰年的个数

    二、random模块

     1 import random
     2 
     3 # 随机数
     4 print(random.random())              # 返回一个随机小数'0.4800545746046827'
     5 print(random.randint(1,5))          # 返回(1-5)随机整型数据
     6 print(random.randrange(1,10))       # 返回(1-10)随机数据
     7 
     8 # 生成随机验证码
     9 code = ''
    10 for i in range(4):
    11     current = random.randrange(0,4)
    12     if current != i:
    13         temp = chr(random.randint(65,90))
    14     else:
    15         temp = random.randint(0,9)
    16     code += str(temp)
    17 
    18 print(code)


    三、OS模块

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


    四、sys模块

    1 import sys
    2 
    3 print(sys.argv)          # 命令行参数List,第一个元素是程序本身路径
    4 print(sys.exit(n))     # 退出程序,正常退出时exit(0)
    5 print(sys.version)       # 获取python的版本信息
    6 print(sys.path)          # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    7 print(sys.platform)      # 返回操作平台的名称


    五、shutil模块

     1 import shutil
     2 shutil.copyfileobj(fsrc, fdst, length=16*1024)      # 将文件内容拷贝到另一个文件中,可以是部分内容
     3 shutil.copyfile(src, dst)                           # 拷贝文件
     4 shutil.copymode(src, dst)                           # 仅拷贝权限。内容、组、用户均不变
     5 shutil.copystat(src, dst)                           # 拷贝状态的信息,包括:mode bits, atime, mtime, flags
     6 shutil.copy(src, dst)                               # 拷贝文件和权限
     7 shutil.copy2(src, dst)                              # 拷贝文件和状态信息
     8 shutil.move(src, dst)                               # 递归的去移动文件
     9 
    10 # base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径
    11 # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    12 # root_dir: 要压缩的文件夹路径(默认当前目录)
    13 # owner: 用户,默认当前用户
    14 # group: 组,默认当前组
    15 # logger: 用于记录日志,通常是logging.Logger对象
    16 shutil.make_archive(base_name, format,root_dir,owner,group,logger)   # 创建压缩包并返回文件路径,例如:zip、tar
    17 
    18 shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的:
    19 
    20 # zipfile 压缩解压
    21 
    22 import zipfile
    23 # 压缩
    24 z = zipfile.ZipFile('laxi.zip', 'w')
    25 z.write('a.log')
    26 z.write('data.data')
    27 z.close()
    28 
    29 # 解压
    30 z = zipfile.ZipFile('laxi.zip', 'r')
    31 z.extractall()
    32 z.close()
    33 
    34 # tarfile 压缩解压
    35 
    36 import tarfile
    37 
    38 # 压缩
    39 tar = tarfile.open('your.tar','w')
    40 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
    41 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
    42 tar.close()
    43 
    44 # 解压
    45 tar = tarfile.open('your.tar','r')
    46 tar.extractall()  # 可设置解压地址
    47 tar.close()


    六、XML处理模块

      1 # xml的格式如下,就是通过<>节点来区别数据结构的:
      2 xmltest.xml
      3 
      4 <?xml version="1.0"?>
      5 
      6 <data>
      7 
      8     <country name="Liechtenstein">
      9 
     10         <rank updated="yes">2</rank>
     11 
     12         <year>2008</year>
     13 
     14         <gdppc>141100</gdppc>
     15 
     16         <neighbor name="Austria" direction="E"/>
     17 
     18         <neighbor name="Switzerland" direction="W"/>
     19 
     20     </country>
     21 
     22     <country name="Singapore">
     23 
     24         <rank updated="yes">5</rank>
     25 
     26         <year>2011</year>
     27 
     28         <gdppc>59900</gdppc>
     29 
     30         <neighbor name="Malaysia" direction="N"/>
     31 
     32     </country>
     33 
     34     <country name="Panama">
     35 
     36         <rank updated="yes">69</rank>
     37 
     38         <year>2011</year>
     39 
     40         <gdppc>13600</gdppc>
     41 
     42         <neighbor name="Costa Rica" direction="W"/>
     43 
     44         <neighbor name="Colombia" direction="E"/>
     45 
     46     </country>
     47 
     48 </data> 
     49 
     50 
     51 #  xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml  
     52 
     53 import xml.etree.ElementTree as ET
     54 
     55 tree = ET.parse("xmltest.xml")
     56 root = tree.getroot()
     57 print(root.tag)
     58 
     59 #遍历xml文档
     60 for child in root:
     61     print(child.tag, child.attrib)
     62     for i in child:
     63         print(i.tag,i.text)
     64 
     65 #只遍历year 节点
     66 for node in root.iter('year'):
     67     print(node.tag,node.text)
     68 
     69 
     70 # 修改和删除xml文档内容
     71 
     72 import xml.etree.ElementTree as ET
     73 
     74 tree = ET.parse("xmltest.xml")
     75 root = tree.getroot()
     76 
     77 #修改
     78 
     79 for node in root.iter('year'):
     80     new_year = int(node.text) + 1
     81     node.text = str(new_year)
     82     node.set("updated","yes")
     83 tree.write("xmltest.xml")
     84 
     85 #删除node
     86 
     87 for country in root.findall('country'):
     88    rank = int(country.find('rank').text)
     89    if rank > 50:
     90        root.remove(country)
     91 tree.write('output.xml')
     92 
     93 
     94 # 自己创建xml文档
     95 import xml.etree.ElementTree as ET
     96 
     97 new_xml = ET.Element("namelist")
     98 name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"})
     99 age = ET.SubElement(name, "age", attrib={"checked": "no"})
    100 age = ET.SubElement(name, "age")
    101 age.text = '33'
    102 name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
    103 age = ET.SubElement(name2, "age")
    104 age.text = '19'
    105 et = ET.ElementTree(new_xml)  # 生成文档对象
    106 et.write("test.xml", encoding="utf-8", xml_declaration=True)
    107 ET.dump(new_xml)  # 打印生成的格式


    七、configparser模块

         用于生成和修改常见配置文档

     1 # 好多软件的常见文档格式如下
     2  [DEFAULT]
     3  compressionlevel = 9
     4  serveraliveinterval = 45
     5  compression = yes
     6  forwardx11 = yes
     7  
     8  [bitbucket.org]
     9  user = hg
    10  
    11  [topsecret.server.com]
    12  host port = 50022
    13  forwardx11 = no
    14  
    15  # python 生成一个这样的文档
    16  
    17  import configparser
    18  
    19  config = configparser.ConfigParser()
    20  
    21  config["DEFAULT"] = {'ServerAliveInterval': '45',
    22                       'Compression': 'yes',
    23                       'CompressionLevel': '9'}
    24  
    25  config['bitbucket.org'] = {}
    26  config['bitbucket.org']['User'] = 'hg'
    27  config['topsecret.server.com'] = {}
    28  topsecret = config['topsecret.server.com']
    29  topsecret['Host Port'] = '50022'
    30  topsecret['ForwardX11'] = 'no'
    31  config['DEFAULT']['ForwardX11'] = 'yes'
    32  with open('example.ini', 'w') as configfile:
    33      config.write(configfile)
    34  
    35  
    36  
    37  # 写完了还可以再读出来
    38  
    39  import configparser
    40  config = configparser.ConfigParser()
    41  config.sections()
    42  file = config.read('example.ini')
    43  print(file)      # ['example.ini']
    44  
    45  title = config.sections()
    46  print(title)     # ['bitbucket.org', 'topsecret.server.com']
    47  
    48  print('bitbucket.org' in config)     # True
    49  print('bytebong.com' in config)      # False
    50  print(config['bitbucket.org']['User'])   # hg
    51  print(config['DEFAULT']['Compression'])   # yes
    52  
    53  topsecret = config['topsecret.server.com']
    54  print(topsecret['ForwardX11'])           # no
    55  print(topsecret['Host Port'])         # 50022
    56  
    57  for key in config['topsecret.server.com']:
    58      print(key)
    59  '''
    60    输出结果:
    61              host port
    62              forwardx11
    63              compressionlevel
    64              serveraliveinterval
    65              compression
    66  '''
    67  print(config['topsecret.server.com']['Compression'])   # yes
    68 
    69 # configparser增删改查语法
    70 import configparser
    71 
    72 config = configparser.ConfigParser()
    73 config.read('i.cfg')
    74 
    75 secs = config.sections()       # 返回配置文件中的主节点
    76 print (secs)
    77 
    78 options = config.options('bitbucket.org')
    79 print(options)                 # 返回所有子节点信息
    80 
    81 item_list = config.items('bitbucket.org')
    82 print(item_list)              # 列出所有子节点详细信息
    83 
    84 val = config.get('topsecret.server.com','host port')
    85 print(val)                    # 返回单个子节点信息
    86 
    87 val2 = config.getint('topsecret.server.com','host port')
    88 print(val2)
    89 
    90 # 删除'bitbucket.org'
    91 sec = config.remove_section('bitbucket.org')
    92 config.write(open('i.cfg','w'))
    93 
    94 
    95 sec2 = config.add_section('huhuan2')      # 添加主节点
    96 config.set('huhuan2','k','1111')          # 添加子节点
    97 config.set('huhuan','kk','2222')
    98 config.remove_option('huhuan','kk')       # 删除子节点
    99 config.write(open('i.cfg','w'))

    八、hashlib模块

      用于加密相关的操作

     1 import hashlib
     2 
     3 # ****** md5 ******
     4 m =hashlib.md5()
     5 m.update(b'hello')
     6 print(m.hexdigest())     # 16进制格式
     7 print(m.digest())        # 2进制格式
     8 
     9 # ****** shal ******
    10 hash = hashlib.sha1()
    11 hash.update(b'hello')
    12 print(hash.hexdigest())
    13 
    14 # ****** sha224 ******
    15 hash = hashlib.sha224()
    16 hash.update(b'hello')
    17 print(hash.hexdigest())
    18 
    19 # ****** sha256 ******
    20 hash = hashlib.sha256()
    21 hash.update(b'hello')
    22 print(hash.hexdigest())
    23 
    24 # ****** sha384 ******
    25 hash = hashlib.sha384()
    26 hash.update(b'hello')
    27 print(hash.hexdigest())
    28 
    29 # ****** sha512 ******
    30 hash = hashlib.sha512()
    31 hash.update(b'hello')
    32 print(hash.hexdigest())
    33 
    34 运行结果:
    35 5d41402abc4b2a76b9719d911017c592
    36 b']A@*xbcK*vxb9qx9dx91x10x17xc5x92'
    37 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
    38 ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
    39 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
    40 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f
    41 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043


    九、logging 模块

      python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug()info()warning()error() and critical() 5个级别。

     1 import logging
     2 
     3 # %(message)s 日志信息
     4 # %(levelno)s 日志级别
     5 # datefmt  设置时间格式
     6 # filename  设置日志保存的路径
     7 # level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,
     8 # 在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。
     9 logging.basicConfig(format='%(asctime)s %(message)s %(levelno)s', datefmt='%m/%d/%Y %I:%M:%S %p',filename='example.log',level=logging.INFO)
    10 logging.debug('This message should go to the log file')
    11 logging.info('So should this')

    日志格式

    %(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

    用户输出的消息

     1 # 对于等级:
     2 
     3 CRITICAL = 50
     4 
     5 ERROR = 40
     6 
     7 WARNING = 30
     8 
     9 INFO = 20
    10 
    11 DEBUG = 10
    12 
    13 NOTSET = 0

    Python 使用logging模块记录日志涉及四个主要类:

    logger提供了应用程序可以直接使用的接口;

    handler将(logger创建的)日志记录发送到合适的目的输出;

    filter提供了细度设备来决定输出哪条日志记录;

    formatter决定日志记录的最终输出格式。

    logger :

    每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的Logger: LOG=logging.getLogger(”chat.gui”)

    而核心模块可以这样: LOG=logging.getLogger(”chat.kernel”)

    Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高

    Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter

    Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler

    Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别

    handler

    handler

    对象负责发送相关的信息到指定目的地。Python的日志系统有多种Handler可以使用。有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些 Handler可以把信息发送到网络上。如果觉得不够用,还可以编写自己的Handler。可以通过

    addHandler()方法添加多个多handler

    Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略

    Handler.setFormatter():给这个handler选择一个格式

    Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

    每个Logger可以附加多个Handler。接下来我们就来介绍一些常用的Handler:
    1)    logging.StreamHandler
    使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。它的构造函数是:
    StreamHandler([strm])
    其中strm参数是一个文件对象。默认是sys.stderr

    2)   logging.FileHandler
    和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。它的构造函数是:
    FileHandler(filename[,mode])
    filename是文件名,必须指定一个文件名。
    mode是文件的打开方式。参见Python内置函数open()的用法。默认是’a',即添加到文件末尾。

    3)   logging.handlers.RotatingFileHandler
    这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建 一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把 文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建 chat.log,继续输出日志信息。它的构造函数是:
    RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
    其中filename和mode两个参数和FileHandler一样。
    maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
    backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。

    4)   logging.handlers.TimedRotatingFileHandler
    这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就 自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
    TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
    其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。
    interval是时间间隔。
    when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
    S 秒
    M 分
    H 小时
    D 天
    W 每星期(interval==0时代表星期一)
    midnight 每天凌晨

     1 import logging
     2 
     3 logger = logging.getLogger('TEST_LOG')    # 获得一个Logger
     4 logger.setLevel(logging.DEBUG)            # 设置日志级别
     5 
     6 ch = logging.StreamHandler()            # logging.StreamHandler这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。
     7 ch.setLevel(logging.DEBUG)
     8 
     9 fh = logging.FileHandler("access.log")  # 用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件
    10 fh.setLevel(logging.WARNING)
    11 
    12 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 设置日志记录的最终输出格式
    13 
    14 ch.setFormatter(formatter)
    15 fh.setFormatter(formatter)
    16 
    17 # 添加ch,fh到logger
    18 logger.addHandler(ch)
    19 logger.addHandler(fh)
    20 
    21 
    22 logger.debug('debug message')
    23 logger.info('info message')
    24 logger.warn('warn message')
    25 logger.error('error message')
    26 logger.critical('critical message')

    文件自动截断实例:

     1 import logging
     2 from logging import handlers
     3 
     4 logger = logging.getLogger(__name__)
     5 log_file = "timelog.log"
     6 fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3)
     7 #fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3)
     8 
     9 formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')
    10 fh.setFormatter(formatter)
    11 
    12 logger.addHandler(fh)
    13 
    14 logger.warning("test1")
    15 logger.warning("test12")
    16 logger.warning("test13")
    17 logger.warning("test14")

    十、subprocess模块(待定)

    十一、json & pickle 模块

    用于序列化的两个模块

    • json,用于字符串 和 python数据类型间进行转换
    • pickle,用于python特有的类型 和 python的数据类型间进行转换

    Json模块提供了四个功能:dumps、dump、loads、load

    pickle模块提供了四个功能:dumps、dump、loads、load

     1 import pickle
     2 
     3 date = {'k1':'123','k2':'hello'}
     4 
     5 str = pickle.dumps(date)    # pickle.dumps 将数据通过特殊的形式转换为只有python认识的字符串
     6 print(str)
     7 
     8 with open('result.pk','w') as fp:  # pickle.dump 将数据通过特殊的形式转换为只有python认识的字符串并写入文件
     9     pickle.dump(date,fp)
    10 
    11 import json
    12 
    13 str1 = json.dumps(date)     # json.dumps 将数据通过特殊形式转换为所有程序语言都认识的字符串
    14 print(str1)
    15 
    16 with open('result1.json','w') as fp:  #json.dump 将数据通过特殊的形式转换为只有python认识的字符串并写入文件
    17     json.dump(date,fp)
  • 相关阅读:
    MS SQL Server获取月份名称缩写
    视频站点程序
    视频站点程序 Ver2
    Infor Syteline 数据库增长月报表
    判断是否有选择RadioButtonList
    获取用户控件中控件的ID
    FileUpload上传图片前首先预览一下
    为TextBox装饰水印
    导航条的重构
    用户自己排序记录
  • 原文地址:https://www.cnblogs.com/huan-ge/p/6822817.html
Copyright © 2011-2022 走看看