zoukankan      html  css  js  c++  java
  • Day 8-模块

    1.测试代码的规范

      输入以下代码:

        if __name__ = '__main__'

    2.模块的分类

      (1)python标准库

      (2)第三方模块

      (3)应用程序自定义模块

    引用:from XXX import add 类似此类

     

    与系统打交道的模块:

      import sys

      sys.path() ##只会将执行文件的路径加入!!!!!

    以后入口文件和程序的起始点最好都命名为bin文件

    如果要调用的文件在几层包的内部,可以用 . 来进行获取: from web.web1.web3 import cal  (其中web是与执行文件同层的包,内部执行了web3里的_init_文件)

    3._name_ == '_main_' 的应用

      用if判断可以用于测试函数是否能正常使用

      !!当该文件被调用时,_name_就不等于_main_了,而是等于文件所在位置,所以判断语句不会被执行

     4.time时间模块

    (1)时间戳

      time.time() 从1970年0时0分0秒开始算起

    (2)结构化时间

      time.localtime()

    import time
    a = time.localtime()
    print(a.tm_year,a.tm_mday)

    通过其下面的属性可以得到具体的年份等

      time.gmtime() 以英国天文台的时间计算,既世界标准时间,UTC

    如何将结构化时间转化为时间戳?-- mktime()方法

     print(time.mktime(time.localtime()))

    !!将结构化时间转化为字符串时间!!重点---strftime() 功能

    print(time.strftime('%Y-%m-%d %X',time.localtime()))

    其中年要用大写的Y表示,中间的连接字符可以自定义 X表示时分秒

    将字符串时间转换为结构化时间!! strptime()功能

    print(time.strptime('2020:2:16:18:13:23','%Y:%m:%d:%X'))

    有一种内置格式-- time,asctime() 将结构化时间转化为一种固定的格式 默认为localtime

      格式如 : Sun Feb 16 18:18:38 2020

    time.ctime()功能可将时间戳转化为与asctime()格式相同的时间表示方式

    5.datatime模块

    import datetime
    print(datetime.datetime.now())

    输出值为2020-02-16 18:25:52.685993

    6.random模块

    (1)random()  #(0,1)--float 为0到1的浮点数

    (2)randint()  #(1,10) --int 输出自定义区间内的整形 包含10

    (3)randrange() #(1,10) --int 不包含10

    (4)choice() #[ ] #加入一个列表,随机取列表中的值 !!!重点!!!可用于验证码

    (5)sample() #[] 加入列表,但可以选择选取的数量, 如random.sample([11,22,33],2) 选取两个值

    (6)uniform(1,10) #()---float 任意范围内的浮点数,自由设置

    (7)shuffle()  打乱所给列表的顺序

    import random
    ret = [2,3,4,5]
    random.shuffle(ret)
    print(ret)

    随机验证码程序

    用chr()来获取小写a-z 加上 大写A-Z 字母 其对应在ASCII码的范围为(65,122)

    随机五位验证码:

    import random
    def v_code():
        ret = ''
        for i in range(5):
            num = random.randint(0,9)
            alp = chr(random.randint(65,122))
            s = str(random.choice([num,alp]))
            ret += s
        return ret
    print(v_code())
    随机验证码程序

    os.path.abspath(__ file__()) 获取当前文件的绝对路径

    当别人调用你的文件时,通过os和sys添加文件地址,可用以下方法:BASE_DIR

    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)

    7. OS模块

    (1)os.path.dirname() 返回path的目录,获取上一级目录的位置

    (2)os.path.abspath() 获取文件的绝对地址

    (3)os.getcwd() 获取当前文件的工作目录

    (4)os.chdir() 改变当前的工作目录

    返回到上一层的工作目录:加入..参数

    os.chdir('..')
    print(os.getcwd())

    (5)os.makedirs()创建多层递归目录

    (6)os.removedirs('模块/file1/file2') 删除目录文件,注意用getcwd()查看当前所在目录  删除时默认删除空的文件夹,包括上一级,如果上一层有内容则不删除

    (7)os.mkdir()  生成单级目录

    (8)os.rmdir() 删除单级空目录

    (9)os.listdir() 列出当前目录下所有的文件

    输出值:['OS模块.py', '时间模块.py', '查询 修改 以及警报器.py', '随机红包程序.py']

    (10)os.remove() 指定删除一个文件

    (11)os.rename() 修改文件名字

    (12)os.stat() 获取某个文件的具体属性信息,如大小有多少字节 st_mtime参数 为上一次修改的时间,以后会用到

    (13)os.sep() 输出操作系统下特定的路径分隔符

    (14)os.linesep() 输出当前平台下使用的行终止符 如:win下为 ' ', Linux下为 ' '

    (15)os.pathsep() 输出分割文件的分隔符 如:win下为; Linux下为:

    (16)os.name() 输出当前平台的名字,如: win 为 ‘nt’ , Linux 为 ‘posix’

    (17)os.system('dir')  获取当前文件下的信息

    (18)os.environ 获取系统环境变量

    (19)os.path.split(path) 将path分割成目录和文件名按元组返回

    (20)os.path.basename() 获取路径文件的文件名!!!

    (21)os.path.exists() 判断路径是否存在,返回布尔值

    (22)os.path.isabs() 判断是否是绝对路径

    (23)os.path.isfile() 判断是否是存在的文件

    (24)os.path.join(a,b) 将多个路径组合拼接,内部会自动找到系统内部的分隔符,进行拼接!!! 重点

    (25)os.path.getatime() 返回文件或目录的最后存取时间

    (26)os.path.getmtime() 返回文件或目录的最后修改时间

    8.sys模块

    (1)sys.path 获取路径

    (2)sys.exit(n) 退出程序

    (3)sys.version 获取python解释程序的版本信息

    (4)sys.argv 使其能在命令行内添加参数  在python内部就能获取到别人执行的操作,是上传post还是别的

    sys.argv
    command = sys.argv[1]
    path = sys.argv[2]
    if command == 'post':
        
    elif command == 'get':
    View Code

    (5)sys.stdout.write()  可模拟进度条

    import sys,time
    for i in range(10):
        sys.stdout.write('#')
        time.sleep(1)
       sys.stdoout.flush()
    进度条实现

     9.json模块 !!!重点!! 序列化

    (1)json.dumps() 将数据类型转换为json字符串类型,必须是双引号!!! 内部会将所有引号变成双引号

     json处理:(首先将有单引号的变成双引号,再在外部用一个单引号包起来)

    {'name':'chris'} ---> '{"name":"chris"}'
    8 ---> '8'
    [11,22] --> "[11,22]"
    'hello' --> '"hello"'

    可用json方法把字典转换为字符串传输到文本当中:

    import json
    dic = {'name':'chris'}
    dic = json.dumps(dic)
    f = open('new','w')
    f.write(dic)

    用json.dump()也能实现,而且两步合为一步  ——> json.dump(dic,f)

    (2)json.loads() 可将文本中的字符串及其本身的类型提取出来,既反序列化

    with open('new','r') as f:
        a = json.loads(f.read())
        print(a)
        print(type(a))

    此时文本new中的字符串的字典类型就被提取出来了 ,用 json.load() 也能实现,少了一步read ——> a = json.load(f) print(a)

    10.pickle模块 将数据类型序列化,处理成字节,支持类型多,但是需求少

    使用与json()一样

    import pickle
    with open('new','wb') as f:
        dic = pickle.dumps(dic)
        print(type(dic))

    此时输出的类型为bytes,字节类型

     11.shelve模块

    open()方法 存入字典,会生成三个文件

    import shelve
    f = shelve.open(r'mokuai')
    f['stuinfo'] = {'name':'chris'}
    f['stuinfo2'] = {'name':'joe'}
    f['stuinfo3'] = {'name':'lin'}
    f.close
    View Code

    取值方法--> print(f.get('stuinfo')['name'])

    12.xml模块

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

    <?xml version="1.0"?>
    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>
    xml数据

    里面的data就是一个根对象,也叫根节点,下面三个country都是节点对象,相当于分支对象

    (1)parse() 读取与连接文件 解析文件

    用一个对象来承载,此时tree变量就是一个对象,之后这个对象就可以使用其方法

    import xml.etree.cElementTree as et
    tree = et.parse('xml数据'

    (2)getroot()

    import xml.etree.cElementTree as et
    tree = et.parse('xml数据')
    root = tree.getroot()
    print(root.tag)

    这里就获得了根对象的标签data

    (3)attrib() 获取标签的属性值

    (4)text() 获取标签的内容

    (5)iter() 只遍历一个节点内容

    for i in root.iter('year'):

      print(i.text)

    (6)set() 对内容进行修改 最后要write()

    for node in root.iter('year'):
        new_year = int(node.text)+1
        node.text = str(new_year)
        node.set('updated','yes')
        node.set('version','1.0')
    tree.write('test.xml')
    修改标签内容及属性

    (7)find()寻找标签 findall() 查找多个对象

    (8)remove() 删除数据

    下面为删除排名大于50的代码:

    import xml.etree.cElementTree as et
    tree = et.parse('xml数据')
    root = tree.getroot()
    for i in root.findall('country'):
        a = int(i.find('rank').text)
        if a > 50:
            root.remove(i)
    tree.write('xml数据')
    View Code

    (9)如何生成一个xml数据

    import xml.etree.ElementTree as ET
    
    new_xml = ET.Element("namelist") #创建根节点
    name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) #创建子节点
    age = ET.SubElement(name, "age", attrib={"checked": "no"})
    sex = ET.SubElement(name, "sex")
    sex.text = '33'
    name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
    age = ET.SubElement(name2, "age")
    age.text = '19'
    
    et = ET.ElementTree(new_xml)  # 生成文档对象 生成文档树 !!!必不可少
    et.write("test.xml", encoding="utf-8", xml_declaration=True)
    
    ET.dump(new_xml)  # 打印生成的格式
    View Code
  • 相关阅读:
    Flex Box 简单弹性布局
    CSS 0.5px 细线边框的原理和实现方式
    前端模块化方案全解(CommonJS/AMD/CMD/ES6)
    用信鸽来讲解HTTPS的知识
    __name__ == "__main__"的作用是什么?
    如何自学计算机科学与技术(Teach Yourself Computer Science)
    中文技术文档的写作规范
    'adb remount'的作用是什么?在什么情况下有用?
    使用python遍历文件夹取出特定的字符串
    Python&Appium实现安卓手机图形解锁
  • 原文地址:https://www.cnblogs.com/caixiaowu/p/12286521.html
Copyright © 2011-2022 走看看