zoukankan      html  css  js  c++  java
  • python_模块

    • time
     1 time_obj = time.localtime()
     2 print("%s-%s-%s %s:%s" % (time_obj.tm_year,time_obj.tm_mon,time_obj.tm_mday,time_obj.tm_hour,time_obj.tm_min))
     3 
     4 print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
     5 
     6 print(time.strptime("2016-01-28 15:40:12","%Y-%m-%d %H:%M:%S"))
     7 
     8 print(datetime.date.today())
     9 
    10 current_time = datetime.datetime.now()
    11 print(current_time)
    12 print(current_time.timetuple())
    13 
    14 new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
    15 new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
    16 new_date = datetime.datetime.now() + datetime.timedelta(hours=-10)#比现在减10小时
    17 new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)#比现在增加120s
    18 new_date = datetime.datetime.now() + datetime.timedelta(weeks=1) #比现在加一周
    • sys
    sys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0)
    sys.version        获取Python解释程序的版本信息
    sys.maxint         最大的Int值
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform       返回操作系统平台名称
    sys.stdin          输入相关
    sys.stdout         输出相关
    sys.stderror       错误相关
    
    1、sys.argv使用方法:
    import sys,os
    
    os.mkdir(sys.argv[1])
    python test4.py heelo #创建目录
    
    2、如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加:
    import sys
    import os
    project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(project_path
     1 import sys
     2 import time
     3 
     4 
     5 def view_bar(num, total):
     6     rate = float(num) / float(total)
     7     rate_num = int(rate * 100)
     8     r = '
    %d%% |%s' % (rate_num, rate_num * "*")
     9     sys.stdout.write(r)
    10     sys.stdout.flush()
    11 
    12 
    13 if __name__ == '__main__':
    14     for i in range(0, 101):
    15         time.sleep(0.1)
    16         view_bar(i, 100)
    进度百分比
    import sys
    import time
    
    
    def view_bar(num, total):
        rate = float(num) / float(total)
        rate_num = int(rate * 100)
        r = '
    %d%%' % (rate_num, )
        sys.stdout.write(r)
        sys.stdout.flush()
    
    
    if __name__ == '__main__':
        for i in range(0, 100):
            time.sleep(0.1)
            view_bar(i, 100)
    • os
     1 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
     2 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
     3 os.curdir                   返回当前目录: ('.')
     4 os.pardir                   获取当前目录的父目录字符串名:('..')
     5 os.makedirs('dir1/dir2')    可生成多层递归目录
     6 os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
     7 os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
     8 os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
     9 os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    10 os.remove()                 删除一个文件
    11 os.rename("oldname","new")  重命名文件/目录
    12 os.stat('path/filename')    获取文件/目录信息
    13 os.sep                      操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    14 os.linesep                  当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    15 os.pathsep                  用于分割文件路径的字符串
    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所指向的文件或者目录的最后修改时间
    • 序列化

    python提供两个模块:json和pickle,其中功能提供有四个:dump,load,dumps,loads

     1 dumps与loads写法:
     2 import pickle
     3 
     4 data = {"k1":123,"k2":"hello"}
     5 
     6 with open("read.txt","wb") as f:
     7     f.write(pickle.dumps(data))
     8 
     9 import pickle
    10 
    11 with open("read.txt","rb") as f:
    12     data = pickle.loads(f.read())
    13     print(data)
    14 
    15 
    16 dump与load写法:
    17 import pickle
    18 
    19 data = {"k1":123,"k2":"hello"}
    20 
    21 with open("read.txt","wb") as f:
    22     pickle.dump(data,f)
    23 
    24 import pickle
    25 
    26 with open("read.txt","rb") as f:
    27     data = pickle.load(f)
    28     print(data)
    29 
    30 json:
    31 import pickle,json
    32 
    33 data = {"k1":123,"k2":"hello"}
    34 
    35 with open("read.txt","w") as f:
    36     # f.write(pickle.dumps(data))
    37     #pickle.dump(data,f)
    38     #f.write(json.dumps(data))
    39     json.dump(data,f)
    40 
    41 import pickle,json
    42 
    43 with open("read.txt","rb") as f:
    44     # data = pickle.loads(f.read())
    45     # data = pickle.load(f)
    46     # print(data)
    47 
    48     # data = json.load(f)
    49     # print(data)
    50     data = json.loads(f.read())
    51     print(data)
     1 转换为字符串:
     2 user = [“aa”,”bb”,”cc”]
     3 s = json.dumps(user)
     4 print(s,type(s))
     5 
     6 dic = {‘k1’:123,’k2’:”ws”}
     7 json.dump(dic,open(“db”,”w”))
     8 
     9 #字符串转换成字典
    10 r = json.load(open(‘db’,’r’))
    11 print(r,type(r))
    12 
    13 #dumps/dump:用于元组,列表,字典等形式转换成字符串
    14 #loads/load:用于字典,列表,元组等形式字符串,装换成字典,列表,元组
    • 基本模块知识
     1 from project.day3 import test9
     2 
     3 print(__file__) #本身自己文件的路径
     4 print(__doc__)  #py文件的注释
     5 print(test9.__package__) # 当前py所在文件夹,用.划分
     6 print(test9.__cached__) #缓存
     7 print(__name__) #只有执行python 主程序时,__name__=='__main__',否则,执行模块名
     8 
     9 def  test():
    10     """验证结果"""
    11     print("测试中")
    12 
    13 print(test.__doc__)
    • requests模块
     1 import urllib
     2 import requests
     3 from xml.etree import ElementTree as ET
     4 
     5 # 使用内置模块urllib发送HTTP请求,或者XML格式内容
     6 """
     7 f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
     8 result = f.read().decode('utf-8')
     9 """
    10 
    11 
    12 # 使用第三方模块requests发送HTTP请求,或者XML格式内容
    13 r = requests.get('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
    14 result = r.text
    15 
    16 # 解析XML格式内容
    17 node = ET.XML(result)
    18 
    19 # 获取内容
    20 if node.text == "Y":
    21     print("在线")
    22 else:
    23     print("离线")
    检查qq是否在线状态
    # 1、无参数实例
    
    import requests
    
    ret = requests.get('https://github.com/timeline.json')
    
    print(ret.url)
    print(ret.text)
    
    # 2、有参数实例
    
    import requests
    
    payload = {'key1': 'value1', 'key2': 'value2'}
    ret = requests.get("http://httpbin.org/get", params=payload)
    
    print(ret.url)
    print(ret.text)
    get请求
    # 1、基本POST实例
    
    import requests
    
    payload = {'key1': 'value1', 'key2': 'value2'}
    ret = requests.post("http://httpbin.org/post", data=payload)
    
    print(ret.text)
    
    # 2、发送请求头和数据实例
    
    import requests
    import json
    
    url = 'https://api.github.com/some/endpoint'
    payload = {'some': 'data'}
    headers = {'content-type': 'application/json'}
    
    ret = requests.post(url, data=json.dumps(payload), headers=headers)
    
    print(ret.text)
    print(ret.cookies)
    post请求
     1 import requests,json,pprint
     2 
     3 place = input("请输入天气地点:")
     4 JsonUrl = "http://wthrcdn.etouch.cn/weather_mini?city=%s" % (place)
     5 TestJsonUrl = requests.get(JsonUrl)
     6 try:
     7     TestJsonUrl.raise_for_status()
     8 except:
     9     print("网址请求出错")
    10 
    11 Data = json.loads(TestJsonUrl.text)
    12 pprint.pprint(Data)
    13 w = Data['data']
    14 print("地点:%s" % w['city'])
    15 
    16 #日期
    17 date_a = []
    18 #最高温与最低温
    19 highTemp = []
    20 lowTemp = []
    21 #天气
    22 weather =[]
    23 #进行五天的天气遍历
    24 for i in range(len(w['forecast'])):
    25     date_a.append(w['forecast'][i]['date'])
    26     highTemp.append(w['forecast'][i]['high'])
    27     lowTemp.append(w['forecast'][i]['low'])
    28     weather.append(w['forecast'][i]['type'])
    29 
    30     #输出
    31     print("日期:" + date_a[i])
    32     print("	温度:最" + lowTemp[i] + '~最' + highTemp[i] )
    33     print("	天气:" + weather[i])
    34     print("")
    35 print("
    今日着装:" + w['ganmao'])
    36 print("当前温度:" + w['wendu'] + "")
    实现获取天气状况
     1 #通过HTTP请求和XML实现获取电视节目
     2 import requests
     3 from xml.etree import ElementTree as ET
     4 
     5 payload = {'theTVstationID':3}
     6 r = requests.post("http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx/getTVchannelDataSet",data=payload)
     7 ret = r.text
     8 
     9 root = ET.XML(ret)
    10 for node in root.iter('TvChanne'):
    11     print(node.find('tvChannel').text)
    实现获取电视节目
    • hashlib加密

    主要提供了SHA1,SHA256,SHA384,SHA512,MD5算法。

     1 import hashlib
     2  
     3 # ######## md5 ########
     4 hash = hashlib.md5()
     5 # help(hash.update)
     6 hash.update(bytes('admin', encoding='utf-8'))
     7 print(hash.hexdigest())
     8 print(hash.digest())
     9  
    10  
    11 ######## sha1 ########
    12  
    13 hash = hashlib.sha1()
    14 hash.update(bytes('admin', encoding='utf-8'))
    15 print(hash.hexdigest())
    16  
    17 # ######## sha256 ########
    18  
    19 hash = hashlib.sha256()
    20 hash.update(bytes('admin', encoding='utf-8'))
    21 print(hash.hexdigest())
    22  
    23  
    24 # ######## sha384 ########
    25  
    26 hash = hashlib.sha384()
    27 hash.update(bytes('admin', encoding='utf-8'))
    28 print(hash.hexdigest())
    29  
    30 # ######## sha512 ########
    31  
    32 hash = hashlib.sha512()
    33 hash.update(bytes('admin', encoding='utf-8'))
    34 print(hash.hexdigest())
    35 
    36 如需要安全可靠,对加密算法中添加自定义key再来做加密:
    37 import hashlib
    38  
    39 # ######## md5 ########
    40  
    41 hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
    42 hash.update(bytes('admin',encoding="utf-8"))
    43 print(hash.hexdigest())
    44 
    45 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密:
    46 import hmac
    47  
    48 h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))
    49 h.update(bytes('admin',encoding="utf-8"))
    50 print(h.hexdigest())
    • xml
     1 xml文件格式如下:
     2 <data>
     3     <country name="Liechtenstein">
     4         <rank updated="yes">2</rank>
     5         <year>2023</year>
     6         <gdppc>141100</gdppc>
     7         <neighbor direction="E" name="Austria" />
     8         <neighbor direction="W" name="Switzerland" />
     9     </country>
    10     <country name="Singapore">
    11         <rank updated="yes">5</rank>
    12         <year>2026</year>
    13         <gdppc>59900</gdppc>
    14         <neighbor direction="N" name="Malaysia" />
    15     </country>
    16     <country name="Panama">
    17         <rank updated="yes">69</rank>
    18         <year>2026</year>
    19         <gdppc>13600</gdppc>
    20         <neighbor direction="W" name="Costa Rica" />
    21         <neighbor direction="E" name="Colombia" />
    22     </country>
    23 </data>
    1、解析xml
    利用ElementTree.XML将字符串解析成xml对象
    from xml.etree import ElementTree as ET
    
     with open("testxml.xml","r") as f:
         root = ET.XML(f.read())
         print(root.tag)
    
    利用ElementTree.parse将文件直接解析成xml对象
    
    from xml.etree import ElementTree as ET
    root = ET.parse("testxml.xml")
    test = root.getroot()
    print(test)
    
    2、遍历xml文档的所有内容
    from xml.etree import ElementTree as ET
    
    root = ET.parse("testxml.xml")
    test = root.getroot()
    print(test.tag)
    
    for child in test:
        print(child.tag,child.attrib)
        for i in child:
            print(i.tag,i.text)
    
    3、遍历xml中指定的节点
    from xml.etree import ElementTree as ET
    
    root = ET.parse("testxml.xml")
    test = root.getroot()
    print(test.tag)
    
    for node in test.iter("year"):
        print(node.tag,node.text)
    
    4、修改节点内容
    from xml.etree import ElementTree as ET
    
    root = ET.parse("testxml.xml")
    test = root.getroot()
    print(test.tag)
    
    for node in root.iter("year"):
        #将year节点内容自增一
        new_year = int(node.text) + 1
        node.text = str(new_year)
    
        # 设置属性
        node.set('name','yinjia')
        node.set('age','18')
    
        #删除属性
        del node.attrib['name']
    
    root.write('testxml.xml',encoding='utf-8')
    
    5、删除节点
    from xml.etree import ElementTree as ET
    
    root = ET.parse("testxml.xml")
    test = root.getroot()
    print(test.tag)
    
    for node in test.findall('country'):
        rank = int(node.find("rank").text)
        if rank > 50:
            test.remove(node)
    
    root.write("testxml.xml",encoding='utf-8')
    •  创建xml文档
     1 from xml.etree import ElementTree as ET
     2 
     3 #创建根节点
     4 root = ET.Element("Home")
     5 
     6 #创建节点大儿子
     7 son1 = ET.Element("son",{"name":"儿1"})
     8 #创建节点小儿子
     9 son2 = ET.Element("son",{"name":"儿2"})
    10 
    11 #在大儿子中创建两个孙子
    12 grandson1 = ET.Element("grandson",{"name":"孙1"})
    13 grandson2 = ET.Element("grandson",{"name":"孙2"})
    14 son1.append(grandson1)
    15 son1.append(grandson2)
    16 
    17 #把儿子添加到根节点
    18 root.append(son1)
    19 root.append(son2)
    20 
    21 tree = ET.ElementTree(root)
    22 tree.write('creat.xml',encoding='utf-8',short_empty_elements=False)
    创建方法一
     1 from xml.etree import ElementTree as ET
     2 
     3 #创建根节点
     4 root = ET.Element("Home")
     5 
     6 #创建节点大儿子
     7 son1 = root.makeelement("son",{"name":"儿1"})
     8 
     9 #创建节点小儿子
    10 son2= root.makeelement("son",{"name":"儿2"})
    11 
    12 #在大儿子中创建两个孙子
    13 grandson1 = son1.makeelement("grandson",{"name":"孙1"})
    14 grandson2 = son1.makeelement("grandson",{"name":"孙2"})
    15 
    16 son1.append(grandson1)
    17 son1.append(grandson2)
    18 
    19 #把儿子添加到根节点
    20 root.append(son1)
    21 root.append(son2)
    22 
    23 tree = ET.ElementTree(root)
    24 tree.write('creat.xml',encoding='utf-8',short_empty_elements=False)
    创建方法二
     1 from xml.etree import ElementTree as ET
     2 
     3 #创建根节点
     4 root = ET.Element("Home")
     5 
     6 #创建节点大儿子
     7 son1 = ET.SubElement(root,"son",attrib={"name":"儿1"})
     8 #创建节点小儿子
     9 son2 = ET.SubElement(root,"son",attrib={"name":"儿2"})
    10 
    11 #在大儿子中创建一个孙子
    12 grandson1 = ET.SubElement(son1,"grandson",attrib={"name":"孙1"})
    13 grandson1.text = "孙子"
    14 
    15 et = ET.ElementTree(root)#生成文档对象
    16 et.write("test.xml",encoding='utf-8',xml_declaration=True)
    创建方法三

     优化默认保存设置成缩进格式,如下:

     1 #优化改进默认设置成缩进格式
     2 from xml.etree import ElementTree as ET
     3 from xml.dom import minidom
     4 
     5 def prettify(elem):
     6     """
     7     将节点转换成字符串,并添加缩进
     8     :param elem:
     9     :return:
    10     """
    11     rough_string = ET.tostring(elem,"utf-8")
    12     reparsed = minidom.parseString(rough_string)
    13     return reparsed.toprettyxml(indent='	')
    14 
    15 #创建根节点
    16 root = ET.Element("Home")
    17 
    18 #创建节点大儿子
    19 son1 = ET.SubElement(root,"son",attrib={"name":"儿1"})
    20 #创建节点小儿子
    21 son2 = ET.SubElement(root,"son",attrib={"name":"儿2"})
    22 
    23 #在大儿子中创建一个孙子
    24 grandson1 = ET.SubElement(son1,"grandson",attrib={"name":"孙1"})
    25 grandson1.text = "孙子"
    26 
    27 raw_str = prettify(root)
    28 with open("test.xml",'w',encoding='utf-8') as f:
    29     f.write(raw_str)
    View Code
    •  xml命名空间
    假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。
    
    使用前缀来避免命名冲突
    此文档带有某个表格中的信息:
    <h:table>
       <h:tr>
       <h:td>Apples</h:td>
       <h:td>Bananas</h:td>
       </h:tr>
    </h:table>
    
    此 XML 文档携带着有关一件家具的信息:
    <f:table>
       <f:name>African Coffee Table</f:name>
       <f:width>80</f:width>
       <f:length>120</f:length>
    </f:table>
    现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table><f:table>)。
    通过使用前缀,我们创建了两种不同类型的 <table> 元素。
     1 from xml.etree import ElementTree as ET
     2 
     3 ET.register_namespace('com',"http://www.company.com") #some name
     4 
     5 # build a tree structure
     6 root = ET.Element("{http://www.company.com}STUFF")
     7 body = ET.SubElement(root, "{http://www.company.com}MORE_STUFF", attrib={"{http://www.company.com}hhh": "123"})
     8 body.text = "STUFF EVERYWHERE!"
     9 
    10 # wrap it in an ElementTree instance, and save as XML
    11 tree = ET.ElementTree(root)
    12 
    13 tree.write("page.xml",
    14            xml_declaration=True,
    15            encoding='utf-8',
    16            method="xml")
    View Code
    •  Configparser模块
     1 #config.ini配置文件
     2 
     3 [com1]
     4 port = 80
     5 url = www.shou.com
     6 k1 = 123
     7 
     8 [com2]
     9 admin = test
    10 password = 123
     1 import configparser
     2 
     3 #读取文件操作
     4 con = configparser.ConfigParser()
     5 con.read("config.ini",encoding='utf-8')
     6 
     7 result = con.sections() #获取所有项名
     8 print(result)
     9 
    10 result1 = con.options("com1") #获取某项名属下的键名
    11 print(result1)
    12 
    13 result2 = con.items("com2") #获取某项名下的所有键值对
    14 print(result2)
    15 
    16 result3  = con.get("com1","ip") #获取指定节点下指定的key的值
    17 print(result3)
     1 import configparser
     2 
     3 #检查、删除、设置等操作方法
     4 con = configparser.ConfigParser()
     5 con.read("config.ini",encoding='utf-8')
     6 
     7 #检查
     8 test1 = con.has_section("com1")
     9 print(test1)
    10 
    11 #添加节点
    12 con.add_section("add_test")
    13 con.write(open("config.ini",'w'))
    14 
    15 #删除节点
    16 con.remove_section("add_test")
    17 con.write(open("config.ini",'w'))
    18 
    19 
    20 #检查、删除、设置指定组内的键值对
    21 #检查
    22 test2 = con.has_option("com1","ip")
    23 print(test2)
    24 
    25 #删除
    26 test3 = con.remove_option("com1","ip")
    27 con.write(open("config.ini",'w'))
    28 
    29 #设置键值对
    30 con.set("add_test","k1","123")
    31 con.write(open("config.ini",'w'))
    • Shutil模块

     1 #高级的文件、文件夹、压缩包处理。
     2 Shutil.make_archive(base_name,format,…)
     3 #创建压缩包并返回文件路径,例如:zip/tar
     4 base_name: 压缩名的文件名,也可以是压缩包文件路径,只是文件名时,则保存至当前目录,否则保存至指定路径
     5 如:www   =》保存至当前路径
     6 如:/user/www =>保存至/user/
     7 format:压缩包种类,
     8 root_dir:要压缩的文件夹路径(默认当前目录)
     9 owner:用户,默认当前用户
    10 logger:用户记录日志,通常是logging.Logger对象
    11 import shutil,zipfile
    12 
    13 #将/user/load/test下的文件打包放置当前程序目录
    14 ret1 = shutil.make_archive("www",'tar',root_dir="/user/load/test")
    15 
    16 #将/user/load/test下的文件打包放置/user/yinjia/目录
    17 ret2 = shutil.make_archive("/user/yinjia/www",'tar',root_dir='/user/load/test')
    18 
    19 #将文件内容拷贝到另一个文件中
    20 shutil.copyfileobj(open("read.txt",'r'),open("page.xml",'a'))
    21 
    22 #拷贝文件
    23 shutil.copyfile("page.xml","pagecopy.xml")
    24 
    25 #仅拷贝权限、内容、组、用户均不变
    26 shutil.copymode("page.xml","pagecopy.xml")
    27 
    28 #拷贝状态的信息,包括:mode bits,atime,mtime,flags
    29 shutil.copystat('page.xml','pagecopy.xml')
    30 
    31 #拷贝文件和权限
    32 shutil.copy('page.xml','pagecopy.xml')
    33 
    34 #拷贝文件和状态信息
    35 shutil.copy2('page.xml','pagecopy.xml')
    36 
    37 #递归的去拷贝文件夹
    38 shutil.copytree('test1','test2',ignore=shutil.ignore_patterns('*.pyc','tmp'))
    39 shutil.copytree('test1','test2',symlinks=True,ignore=shutil.ignore_patterns('*.pyc','tmp'))
    40 
    41 #递归的去删除文件
    42 shutil.rmtree('test1')
    43 
    44 #递归去移动文件,类似mv命令,其实就是重命名
    45 shutil.move('test1','test2')
    46 
    47 #压缩
    48 z = zipfile.ZipFile("test.zip",'a')
    49 z.write('a.log')
    50 z.write('te.xml')
    51 z.close()
    52 
    53 #解压
    54 z = zipfile.ZipFile("test.zip",'r')
    55 z.extractall()
    56 z.close()
    57 #压缩
    58 tar = tarfile.open("test.tar","w")
    59 tar.add('/user/test/1.log',arcname='aa.log')
    60 tar.add("/user/test1/2.log",arcname='bb.log')
    61 tar.close()
    62 
    63 #压缩
    64 tar = tarfile.open("test1.tar",'r')
    65 tar.extractall() #可设置解压地址
    66 tar.close()
    • subprocess 模块

    call 

    执行命令,返回状态码

    1 ret = subprocess.call(["ls", "-l"], shell=False)
    2 ret = subprocess.call("ls -l", shell=True)

    check_call

    执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

    1 subprocess.check_call(["ls", "-l"])
    2 subprocess.check_call("exit 1", shell=True)

    check_output

    执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常

    1 subprocess.check_output(["echo", "Hello World!"])
    2 subprocess.check_output("exit 1", shell=True)

    subprocess.Popen(...)

    参数:

    • args:shell命令,可以是字符串或者序列类型(如:list,元组)
    • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
    • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
    • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
    • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
      所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
    • shell:同上
    • cwd:用于设置子进程的当前目录
    • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
    • universal_newlines:不同系统的换行符不同,True -> 同意使用
    • startupinfo与createionflags只在windows下有效
      将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 
    1 import subprocess
    2 ret1 = subprocess.Popen(["mkdir","t1"])
    3 ret2 = subprocess.Popen("mkdir t2", shell=True)
    执行普通命令

    终端输入的命令分为两种:

    • 输入即可得到输出,如:ifconfig
    • 输入进行某环境,依赖再输入,如:python
    1 import subprocess
    2 
    3 obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
    View Code
     1 import subprocess
     2 
     3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
     4 obj.stdin.write("print(1)
    ")
     5 obj.stdin.write("print(2)")
     6 obj.stdin.close()
     7 
     8 cmd_out = obj.stdout.read()
     9 obj.stdout.close()
    10 cmd_error = obj.stderr.read()
    11 obj.stderr.close()
    12 
    13 print(cmd_out)
    14 print(cmd_error)
    View Code
    1 import subprocess
    2 
    3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    4 obj.stdin.write("print(1)
    ")
    5 obj.stdin.write("print(2)")
    6 
    7 out_error_list = obj.communicate()
    8 print(out_error_list)
    View Code
    1 import subprocess
    2 
    3 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    4 out_error_list = obj.communicate('print("hello")')
    5 print(out_error_list)
    View Code
    • logging模块

    1、单文件日志

     1 import logging
     2   
     3   
     4 logging.basicConfig(filename='log.log',
     5                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
     6                     datefmt='%Y-%m-%d %H:%M:%S %p',
     7                     level=10)
     8   
     9 logging.debug('debug')
    10 logging.info('info')
    11 logging.warning('warning')
    12 logging.error('error')
    13 logging.critical('critical')
    14 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 # 写日志
    17 logger1.critical('1111')
    日志一
    1 # 定义文件
    2 file_2_1 = logging.FileHandler('l2_1.log', 'a')
    3 fmt = logging.Formatter()
    4 file_2_1.setFormatter(fmt)
    5 
    6 # 定义日志
    7 logger2 = logging.Logger('s2', level=logging.INFO)
    8 logger2.addHandler(file_2_1)
    日志二

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

    • 当使用【logger1】写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中
    • 当使用【logger2】写日志时,会将相应的内容写入 l2_1.log 文件中
  • 相关阅读:
    《JavaScript高级程序设计》扩展关于动态原型
    “三角边”的那点事儿
    请允许我说:数学是如此美丽!
    球面模型分解及仿flash标签云
    关于Javascript模块化和命名空间管理
    我所了解的关于JavaScript定义类和对象的几种方式
    正因为我们是前端,所以代码更需要优雅
    “作弊”还是创意?伪3D
    mybatis常用jdbcType数据类型以及对应的JavaType
    mdx之计算成员和命名集
  • 原文地址:https://www.cnblogs.com/yinjia/p/8597286.html
Copyright © 2011-2022 走看看