python基础8-模块/time/random/OS/sys/JSON/XML

  • 程序解耦
  • tag的用法
  • 模块(module)

  • 一个.py文件就是一个模块(module)
  • 模块包括:python标准库,第三方模块,应用程序自定义模块
  • pycharm中,package中必须有__init__.py文件,direcory中没有
  1. package就是组织.py文件用的,一个包中放同一类型py文件
  2. 不同路径下可以有重名py文件
  • namespace名字空间
  • import(cal)做2件事,所以一般不在cal中定义逻辑函数,只定义功能函数
  1. 是把cal文件执行一遍
  2. 引用cal的变量名
  • import cal, time,引用多个模块
  • from cal import add,from cal import *,从cal中引入一个函数add,或者引入全部函数
  • import sys,sys.path找到的路径,就是import寻找导入模块时的路径顺序。这是执行文件对应的路径,是解释器唯一能认识的路径,引入文件也是按照执行文件的路径进行查找,所以必须在执行文件中import所有.py。或者将所有引入模块的路径加入sys.path的列表中。
  • sys.path.append(),临时修改环境变量,不是永久修改。永久修改得改系统path。把bin.py文件写在一个包中
  • import sys, os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    #abspath拿到文件的绝对路径,dirname向外层找文件地址,两个外层就行
    print(sys.path.append(BASE_DIR))
    print(sys.path)
  • from my_module import cal,从同层的my_module文件夹中找到cal模块
  • bin.py是起始文件,main.py是逻辑功能主函数,其他功能函数放在别的地方
  • from web.web1.web3 import cal,引用三层包的cal模块,用.连接。import后一般接模块,如果接包,则是执行包中的_init_文件
  • _name_在执行文件中打印,就是字符串_main_。在被调用文件中执行,拿到的就是被调用文件的路径
  1. 测试代码时用,if __name__=='_main_'后接测试代码,如果匹配,说明当前处于测试环境,则执行代码。如果不匹配,说明当前是被调用状态,不执行测试代码
  2. 这句话放在bin.py文件,说明不想让bin成为被调用文件。bin可以提供接口,但不能执行我的主函数
  • time模块

  • time.time()是时间戳,单位是秒,从19700101凌晨开始算。做计算用的
  • 结构化时间
  1. time.localtime(),拿到的是当前时间,是字符时间。将时间戳时间即可转换为结构化时间。 
  2. time.gmtime(),显示格林尼治时间,UTC
  3. mktime(localtime)将结构化时间转换为时间戳。

  • 字符串时间
  1. time.strftime('%Y-%m-%d %X',time.local.time()),将当前结构化时间转换为字符串时间,年月日小时
  2. time.strptime('2016:12:24:17:50:36', '%Y:%m:%d:%X),将字符串时间转换为结构化时间
  • time.asctime(),将结构化时间转换为固定的字符串时间,使用python内置的字符串时间显示形式
  • time.ctime(),将时间戳转换为固定形式的字符串时间
  • time.sleep(),线程推迟指定的时间运行,单位为秒
  • datetime.datetime.now(),显示另外一种字符串时间
  • 给自创py文件起名字时,不要跟python内置py文件重名。time,sys文件特殊,不是py文件,是c 语言实现的,python解释器也是c语言,内置在python解释器中,直接在封装在了python中,即使重名,也不影响内置time运行
  • random模块

  • random.random随机生成一个0到1的浮点数
  • random.randint(1,3),在[1,3]之间取整数
  • random.randrange(1,3),在[1,3)取整数
  • random.choice([1,'23',[4,5]])三个内容中随机取一个,处理可迭代对象
  • random.sample([11,22,33,44,55], 2)从列表中随机选择出两个值
  • random.uniform(1,3)随机生成一个指定范围的浮点数据
  • random.shuffle(),将列表打乱,例如洗扑克
  • import random
    def v_code():
        ret = ""
        for i in range(5):
            num = random.randint(0, 9)
            alf = chr(random.randint(65, 122))
            s = str(random.choice([num, alf]))
            ret += s
        return ret
    print(v_code())
    随机生成验证码
  • OS模块

  • dirname,abspath
  • os.getward(),获取当前文件目录,即文件路径
  • os.chdir()改变当前脚本工作目录,相当于shell下的cd。chdir('..')到上层目录
  • os.makedirs('dir1/dir2')    可生成多层递归目录

  • os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

  • os.stat('path/filename')获取文件/目录信息,其中st_size是文件占用的字节数
  • os.linsep,输出当前平台使用的行终止符,win下为"\r\n",linux为"\n"
  • os.system('bash comman'),运行shell命令,直接显示
  •  os.path.dirname(),拿py文件的路径,os.path.basename(),拿py文件名

  • a="路径1",b="路径2",os.path.join(a,b),将两个路径拼接,形成新的路径
  • sys模块

  • sys.argv           命令行参数List,第一个元素是程序本身路径。可以直接在调用py文件命令后边,加上输入参数,然后在函数内取值
  • sys.exit(n)        退出程序,正常退出时exit(0)
  • sys.version        获取Python解释程序的版本信息
  • sys.maxint         最大的Int
  • sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  • sys.platform       返回操作系统平台名称
  • sys.stdin          输入相关
  • sys.stdout.write('#')         向屏幕输出相关内
  • import time,sys
    for i in range(100):
        sys.stdout.write('#')#向终端输出内容
        time.sleep(0.1)#与下一步结合,营造出动态显示的效果
        sys.stdout.flush()#调用系统接口,从内存中向终端刷新
  • sys.stderror       错误相关

########################################

  • json模块

  • 可以进行任何语言的数据交换,是从js语言中提取出来的
  • 把字典存入文件,需要转换成字符串,提取出来需要加eval(),但是有局限性
  • pickle可以存任何东西,函数变量,类变量
  • json.dumps(dic),将任意数据类型封装成json字符串数据,无论dic什么引号,或者list,int,json都将其变为双引号字符串,称为json字符串。
  • 除了存到磁盘上要保存成字符串,前端和后端互相传输时也要存成字符串
  • json.load(),将json字符串还原成原数据类型
  • f = open('new_hello', 'w')
    dic_str = json.dumps(dic)
    f.write(dic_str)
    # 虽然二者等价,但dump只能用于文件操作,因此推荐用上一种
    json.dump(dic.f)
  • load与loads相比,少了f.read
  • 只要字符串符合json规范,是双引号,就可以loads,非必须得dumps
  • pickle 模块

  • 用法与json相同,只是转换成字节byte。文件打开是用wb。序列化和反序列化
  • 支持序列的对象更多,除了字典等基本数据类型,还可以序列函数,类
  • 序列化,把对象变量从内存中变成可存储或传输的过程
  • xml模块

  • java中xml是必须的,也是包装语言,在金融领域以前用的多
  • 标签语言,html语言也是标签语言,所有语法都是通过标签实现的。
  • 有头有尾的标签叫非闭合标签,有头无尾的叫自闭合标签
  • 增删改查
  • import xml.etree.ElementTree as ET,引入xml模块
  • ET.parse('xml_lesson.xml'),打开xml文件。要有对象概念,实体对象,可以调用方法,可以调用属性。
  • 属性是对象下边的属性,是键值对,属性名和属性值。标签是通过属性完成信息传输的,属性用来解释标签名字。非闭合标签如有属性,一定加在首部位置
  • root = tree.getroot(),拿到根结点
  • root.tag,打印出节点的标签
  • for i in root:
         #print(i.tag)
    for j in i:
    print(j.tag)#对根结点进行遍历操作
  • i.attrab,打印出对象的属性
  • i.text取出标签内容
  • for node in root.iter('year')
         print(node.tag, node.text)#遍历root结点,只拿标签year的标签名和内容
  • #修改xml中year中的属性
    import
    xml.etree.ElemenTree as ET
    tree
    = ET.parse("xml_lesson")#导入文件 root = tree.getroot() for node in root.iter('year'): new_year = int(node.text) + 1#修改标签的内容 node.text = str(new_year) node.set("updated","yesy")#增加一个属性,包括属性名和属性值 tree.write("ET"
  • 删除country中rank中大于50的country
    for
    country in root.findall('country'):#找到root中所有的country标签 rank = int(country.find('rank').text)#find找标签 if rank >50: root.remove(country)
  • #创建一个xml文件
    导入模块
    
    new_xml = ET.Element("namelist")#创建一个namelist的标签
    name = ET.SubElement(new_xml, "name",attrib={"enrolled":"yes"}
    #在对象new_xml中创建一个标签,name,然后属性为...
    !!!最后
    et = ET.ElementTree(new_xml)#生成文档树
    et.write("test.xml",encoding="utf_8",xml_declaration=True)#将内容写入文档对象中
  • shelve模块

  • 与pickle模块类型,支持的处理对象也是有限的
  • 将所有内容都处理成字典,按照字典的逻辑为大家存储数据
posted @ 2022-01-12 16:50  线索  阅读(57)  评论(0编辑  收藏  举报