zoukankan      html  css  js  c++  java
  • Python基础知识学习_Day6

    一、time&datetime模块

    常用选项如下:

    import time
    print(time.asctime()) #返回时间格式
    print(time.localtime())#返回本地时间struct时间对象
    #print(time.gmtime(time.time()-80000))
    t1_str = time.strptime("2016/11/13","%Y/%m/%d")
    print(t1_str) #将字符串转化成struct时间对象
    print(time.strptime('2016-08-20 15:31:25',"%Y-%m-%d %H:%M:%S"))#同上
    t2 = time.mktime(t1_str) #struct时间对象转化成时间戳
    print(t2)
    t3 = time.gmtime(time.time()) #将时间戳转化struct时间格式
    print(t3)
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
    t4 = time.strftime("%Y-%m-%d %H-%M-%S",t3)
    print(t4)
    

      转换格式如下:

    二、random模块

    random随机数模块,用于生成随机数字

    生成随机状态码方法:

     1 import random
     2 import string
     3 print(random.random())
     4 print(random.randint(1,5))
     5 print(random.randrange(1,3))
     6 ---------第一种方法----------------------------------
     7 str_source = string.ascii_letters + string.digits
     8 print(random.sample(str_source,7))
     9 ----------------第二种方法----------------------
    10 check = ""
    11 for i in range(5):
    12     current = random.randrange(0,5)
    13     if current !=i:
    14         temp = chr(random.randint(65,90))
    15     else:
    16         temp = random.randint(0,9)
    17     check+=str(temp)
    18 print(check)

     三、shutil模块

    高级的文件压缩包处理模块

    1 import shutil
    2 shutil.copyfile("s1.py","s4.py")#copy文件
    3 shutil.copy("s1.py","s4.py")#copy文件和权限
    4 shutil.copy2("s1.py","s4.py")#copy文件和状态信息
    5 shutil.copymode("s1.py","s4.py")#仅copy权限
    6 shutil.rmtree(r"C:UsersAdministratorPycharmProjectss15day1a") #递归的删除文件
    7 shutil.move(r"C:UsersAdministratorPycharmProjectss15day1lock",".") #移动文件
    8 ret = shutil.make_archive("test",'gztar',root_dir=r"C:UsersAdministratorPycharmProjectss15day1")
    9 #test目标文件名,gztar 压缩类型,root_dir要压缩的文件路径

    四、shelve模块

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

    import shelve
    
    d = shelve.open('shelve_test') #打开一个文件 
    
    class Test(object):
        def __init__(self,n):
            self.n = n
    
    
    t = Test(123)  
    t2 = Test(123334)
    
    name = ["alex","rain","test"] 
    d["test"] = name #持久化列表
    d["t1"] = t      #持久化类
    d["t2"] = t2
    
    d.close()


    五、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

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

     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)
    10     for i in child:
    11         print(i.tag,i.text)
    12 
    13 #只遍历year 节点
    14 for node in root.iter('year'):
    15     print(node.tag,node.text)
    16 修改和删除xml文档内容
    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 
    29 tree.write("xmltest.xml")
    30 
    31 
    32 #删除node
    33 for country in root.findall('country'):
    34    rank = int(country.find('rank').text)
    35    if rank > 50:
    36      root.remove(country)
    37 
    38 tree.write('output.xml')
    39 自己创建xml文档
    40 
    41 import xml.etree.ElementTree as ET
    42 
    43 
    44 new_xml = ET.Element("namelist")
    45 name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    46 age = ET.SubElement(name,"age",attrib={"checked":"no"})
    47 sex = ET.SubElement(name,"sex")
    48 sex.text = '33'
    49 name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    50 age = ET.SubElement(name2,"age")
    51 age.text = '19'
    52 
    53 et = ET.ElementTree(new_xml) #生成文档对象
    54 et.write("test.xml", encoding="utf-8",xml_declaration=True)
    55 
    56 ET.dump(new_xml) #打印生成的格式
    xml使用

    六、ConfigParser模块

    用于生产和修改常见配置文档,举例如下:

      1 [DEFAULT]
      2 ServerAliveInterval = 45
      3 Compression = yes
      4 CompressionLevel = 9
      5 ForwardX11 = yes
      6 
      7 [bitbucket.org]
      8 User = hg
      9 
     10 [topsecret.server.com]
     11 Port = 50022
     12 ForwardX11 = no
     13 如果想用python生成一个这样的文档怎么做呢?
     14 
     15 import configparser
     16 
     17 config = configparser.ConfigParser()
     18 config["DEFAULT"] = {'ServerAliveInterval': '45',
     19                       'Compression': 'yes',
     20                      'CompressionLevel': '9'}
     21 
     22 config['bitbucket.org'] = {}
     23 config['bitbucket.org']['User'] = 'hg'
     24 config['topsecret.server.com'] = {}
     25 topsecret = config['topsecret.server.com']
     26 topsecret['Host Port'] = '50022'     # mutates the parser
     27 topsecret['ForwardX11'] = 'no'  # same here
     28 config['DEFAULT']['ForwardX11'] = 'yes'
     29 with open('example.ini', 'w') as configfile:
     30    config.write(configfile)
     31   
     32 
     33 写完了还可以再读出来哈。
     34 
     35 >>> import configparser
     36 >>> config = configparser.ConfigParser()
     37 >>> config.sections()
     38 []
     39 >>> config.read('example.ini')
     40 ['example.ini']
     41 >>> config.sections()
     42 ['bitbucket.org', 'topsecret.server.com']
     43 >>> 'bitbucket.org' in config
     44 True
     45 >>> 'bytebong.com' in config
     46 False
     47 >>> config['bitbucket.org']['User']
     48 'hg'
     49 >>> config['DEFAULT']['Compression']
     50 'yes'
     51 >>> topsecret = config['topsecret.server.com']
     52 >>> topsecret['ForwardX11']
     53 'no'
     54 >>> topsecret['Port']
     55 '50022'
     56 >>> for key in config['bitbucket.org']: print(key)
     57 ...
     58 user
     59 compressionlevel
     60 serveraliveinterval
     61 compression
     62 forwardx11
     63 >>> config['bitbucket.org']['ForwardX11']
     64 'yes'
     65 configparser增删改查语法
     66 
     67 [section1]
     68 k1 = v1
     69 k2:v2
     70  
     71 [section2]
     72 k1 = v1
     73 
     74 import ConfigParser
     75  
     76 config = ConfigParser.ConfigParser()
     77 config.read('i.cfg')
     78  
     79 # ########## 读 ##########
     80 #secs = config.sections()
     81 #print secs
     82 #options = config.options('group2')
     83 #print options
     84  
     85 #item_list = config.items('group2')
     86 #print item_list
     87  
     88 #val = config.get('group1','key')
     89 #val = config.getint('group1','key')
     90  
     91 # ########## 改写 ##########
     92 #sec = config.remove_section('group1')
     93 #config.write(open('i.cfg', "w"))
     94  
     95 #sec = config.has_section('wupeiqi')
     96 #sec = config.add_section('wupeiqi')
     97 #config.write(open('i.cfg', "w"))
     98  
     99  
    100 #config.set('group2','k1',11111)
    101 #config.write(open('i.cfg', "w"))
    102  
    103 #config.remove_option('group2','age')
    104 #config.write(open('i.cfg', "w"))
    ConfigParser

    七、hashlib模块

    用于加密相关的操作,用法如下:

     1 import hashlib
     2 m = hashlib.md5()
     3 m.update(b"Hello")
     4 m.update(b"It's me")
     5 print(m.digest())
     6 m.update(b"")
     7 print(m.digest()) #2进制格式hash
     8 print(len(m.hexdigest())) #16进制
     9 import hashlib
    10 hash = hashlib.md5()
    11 hash.update('admin')
    12 print(hash.hexdigest())
    13 
    14 hash = hashlib.sha256()
    15 hash.update('admin')
    16 print(hash.hexdigest())
    17 
    18 hash = hashlib.sha512()
    19 hash.update('admin')
    20 print(hash.hexdigest())
    21 python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密
    22 
    23 import hmac
    24 h = hmac.new('wueiqi')
    25 h.update('hellowo') 
    26 print h.hexdigest()

    八、日志模块

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

    1 import logging
    2 logging.basicConfig(filename='log.log',level=logging.INFO,format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
    3 #logging.basicConfig(format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
    4 logging.debug("debug")
    5 logging.info("info")
    6 logging.warning("warning")
    7 logging.error("error")
    8 logging.critical("critical")
    9 logging.log(10,"log")

    日志格式

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

    用户输出的消息

    如果需要将log打印在屏幕里,需要用到handler,Python使用logging模块记录日志主要涉及四个主要类:

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

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

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

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

    九、re模块

    常用正则表达式符号

    '.'		默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    '^'		匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","
    abc
    eee",flags=re.MULTILINE)
    '$'		匹配字符结尾,或e.search("foo$","bfoo
    sdfsf",flags=re.MULTILINE).group()也可以
    '*'		匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
    '+'		匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
    '?'		匹配前一个字符1次或0次
    '{m}'	匹配前一个字符m次
    '{n,m}'	匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
    '|'		匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group()	结果'ABC'
    '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
    
    
    'A'	只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
    ''	匹配字符结尾,同$
    'd'	匹配数字0-9
    'D'	匹配非数字
    'w'	匹配[A-Za-z0-9]
    'W'	匹配非[A-Za-z0-9]
    's'		匹配空白字符、	、
    、
     , re.search("s+","ab	c1
    3").group() 结果 '	'
    
    '(?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'}
    

      

    最常用的匹配语法

    re.match 从头开始匹配
    re.search 匹配包含
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub		匹配字符并替换 
    

    关于反斜杠问题:
    与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。同样,匹配一个数字的"\d"可以写成r"d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

  • 相关阅读:
    icePDF去水印方法
    JAVA中pdf转图片的方法
    使用jQuery的ajax调用action的例子
    win7下JAVA环境变量配置方法
    Keil MDK仿真调试STM32的时候直接进入SystemInit函数
    山大王的个人勤奋和制度设计
    海思HI2115芯片-NB-IOT模块向外发短信测试
    UCOS III的时间片轮转调度的一个问题
    STM32F405的 ADC参考电压选择问题
    ACS712电流传感器应用
  • 原文地址:https://www.cnblogs.com/liumj0305/p/6060889.html
Copyright © 2011-2022 走看看