Python开发Day06

模块补充

  • 模块补充

    • hashlib

      • 介绍
      • 使用
        • md5
        • sha1
        • sha256
        • sha384
        • sha512
    • configparser
      • 介绍
      • 使用
        • 获取所有的节点
        • 获取指定节点下所有的键值对
        • 获取指定节点下所有的建
        • 获取指定节点下指定key的值
        • 添加节点
        • 检查节点
        • 删除节点
        • 删除节点内某一个键的值
        • 检查某一个节点中有没有这个键
        • 设置指定节点中指定键的值
    • XML
      • 介绍
      • 使用方法
        • 解析XML的两种方法
      • 操作XML文件

模块补充


  • hashlib

    • 介绍

      • 本模块用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
    • 使用

      • md5

        import hashlibhash = hashlib.md5()hash.update(bytes(‘Qi‘, encoding=‘utf-8‘))print(hash.hexdigest())
      • sha1

        import hashlibhash = hashlib.sha1()hash.update(bytes(‘Wu‘,encoding=‘utf-8‘))print(hash.hexdigest())
      • sha256

        import hashlibhash = hashlib.sha256()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
      • sha384

        import hashlibhash = hashlib.sha384()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
      • sha512

        import hashlibhash = hashlib.sha512()ash.update(bytes(‘Wu‘, encoding=‘utf-8‘))print(hash.hexdigest())
    • ps:以上的价目算法虽然很厉害,但是存在缺陷,可以通过装库来反解,所以在有必要的时候对加密算法中添加自定义key后再来做加密
      • MD5

        import hashlibhash = hashlib.md5(bytes(‘89fds‘,encoding="utf-8"))hash.update(bytes(‘Wu‘,encoding="utf-8"))print(hash.hexdigest()) 
    • python还有一个内置的hmac模块,他内部对我们创建的key和内容进行额外的处理然后加密
      import hmach = hamc.new(bytes(‘sasss‘,encoding=‘utf-8))h.update(bytes(‘Qi‘,encoding=‘utf-8‘))print(h.hexdigest())

  • configparser

    • 介绍

      • 用来处理特定格式的文件,本质上是利用open来操作文件
    • 使用

      • 获取所有的节点

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)#参数一:要打开文件的路径。参数二:指定打开文件时使用什么编码ret = config.sections()#获取所有的节点,用列表返回print(ret)
      • 获取指定节点下所有的键值对

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)ret = config.items(‘k1‘)print(ret)
      • 获取指定节点下所有的建

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)ret = config.options(‘W‘)print(ret)
      • 获取指定节点下指定key的值

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)ret = config.get(‘w‘,‘k1‘)#获取w节点下的k1的值ret2 = config.getint(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成整型ret3 = config.getfloat(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成浮点型ret4 = config.getboolean(‘section1‘, ‘k1‘)#获取w节点下的k1的值,并转成bool型print(ret)
      • 添加节点

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.add_section("WU")#添加一个WU节点config.write(open(‘test‘, ‘w‘))#将内存中修改后的内容写入到文件中
      • 检查节点

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)has_sec = config.has_section(‘W3‘)#检查节点W3是否存在存在返回True否则Falseprint(has_sec)
      • 删除节点

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.remove_section("WU")#删除WU节点config.write(open(‘test‘, ‘w‘))
      • 删除节点内某一个键的值

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘,encoding=‘utf-8‘)config.remove_option(‘W1‘,‘name‘)#在内存中删除W1节点下的name键值对config.write(open(‘test‘,‘w‘))#将内存中的内容写入文件
      • 检查某一个节点中有没有这个键

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘,encoding=‘utf-8‘)print(config.has_option(‘W1‘,‘name‘))
      • 设置指定节点中指定键的值

        import configparserconfig = configparser.ConfigParser()config.read(‘test‘, encoding=‘utf-8‘)config.set(‘W1‘,‘name‘,‘WuYongQi‘)#将W1节点下的键为name的值改成WuYongQiconfig.write(open(‘test‘,‘w‘))#将内存中的内容写入的磁盘

  • XML

    • 介绍

      • XML是实现不同语言或程序之间进行数据交换的协议,具体格式如下

        <data>    <country name="Liechtenstein">        <rank updated="yes">2</rank>        <year>2023</year>        <gdppc>141100</gdppc>        <neighbor direction="E" name="Austria" />        <neighbor direction="W" name="Switzerland" />    </country>    <country name="Singapore">        <rank updated="yes">5</rank>        <year>2026</year>        <gdppc>59900</gdppc>        <neighbor direction="N" name="Malaysia" />    </country>    <country name="Panama">        <rank updated="yes">69</rank>        <year>2026</year>        <gdppc>13600</gdppc>        <neighbor direction="W" name="Costa Rica" />        <neighbor direction="E" name="Colombia" />    </country></data>
    • 使用方法

      • 解析XML的两种方法

        1. 使用 ElementTree.XML

          from xml.etree import ElementTree as ETstr_xml = open(‘test.xml‘, ‘r‘).read()#打开文件,读取xml文件内容root = ET.XML(str_xml)#将字符串解析成xml特殊对象,root代指xml文件的根节点
        2. 使用ElementTree.parse
          from xml.etree import ElementTree as ETtree = ET.parse("xo.xml")#直接解析xml文件root = tree.getroot()#获取xml文件的根节点
      • 操作XML文件

        • Element类的方法

          • tag 当前节点标签名
          • attrib 当前节点属性
          • text 当前节点的内容
          • makeelement(tag,attrib) 创建一个新的节点
          • append(self, subelement) 在当前节点追加一个子元素
          • extend(self, elements) 为当前节点扩展 n 个子节点,elements是一个序列
          • insert(self, index, subelement) 在当前节点创建子节点,然后插入指定位置
          • remove(self, subelement) 删除指定的节点subelement
          • find(self, path, namespaces=None) 获取第一个寻找到的子节点
          • findtext(self,path,default=None,namespaces=None)获取第一个寻找到的子节点内容
          • findall(self, path, namespaces=None) 获取所有的子节点
          • iterfind(self, path, namespaces=None) 获取所有指定的节点,并创建一个迭代器(可以被for循环)
          • clear(self) 清空节点
          • get(self, key, default=None) 获取当前节点的属性值
          • set(self, key, value) 为当前节点设置属性值
          • keys(self) 获取当前节点所有属性的key
          • items(self) 获取当前节点所有的属性值,每一个属性都是一对键值对
          • iter(self, tag=None) 在当前节点的子孙中根据节点名称寻找所有指定的节点,并返回一个迭代器(可以被for循环)。
          • itertext(self) 在当前节点下所有的节点中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器(可以被for循环)。
        • 浏览XML文档中所有内容
          from xml.etree import ElementTree as ET #使用xml文件夹下的etree文件夹下的EementTree文件,并且自定义名称为ET-------------- 打开方式一 --------------str_xml = open(‘test.xml‘, ‘r‘).read()# 打开文件,读取XML文件内容root = ET.XML(str_xml)#将字符串解析成xml特殊对象,root代指xml文件的根节点-------------- 打开方式二 --------------tree = ET.parse("xo.xml")#直接解析xml文件root = tree.getroot()#获取xml文件的根节点print(root.tag)# 查看root节点名称for i in root:#查询XML文档的第二层    print(i.tag, i.attrib)查看第二层节点的标签名称和标签属性    for ii in i: #查询XML文档的第三层        print(ii.tag,ii.text) #查看第三层节点的标签名称和内容
        • 浏览XML文档中指定的节点
          from xml.etree import ElementTree as ETtree = ET.parse("xo.xml")root = tree.getroot()print(root.tag)for i in root.iter(‘year‘):# 查询XML中所有的year节点    print(i.tag, i.text)#输出节点的标签名称和内容
        • 修改节点内容(方法一)
          from xml.etree import ElementTree as ETstr_xml = open(‘xo.xml‘, ‘r‘).read()root = ET.XML(str_xml)for i in root.iter(‘year‘): #循环所有的year节点    new_year = int(i.text) + 10 #将year节点中的内容 增加十    i.text = str(new_year)    i.set(‘name‘, ‘Wu‘) #设置属性本次循环节点的属性name为Wu    i.set(‘age‘, ‘20‘) #设置属性本次循环节点的属性age为20    del i.attrib[‘name‘]  #删除本次循环节点属性name
          
          tree = ET.ElementTree(root) #使用ElementTree下的ElementTree方法tree.write("test2.xml", encoding=‘utf-8‘)#写如文件test2.xml中,使用utf-8编码
        • 修改节点内容(方法二)
          from xml.etree import ElementTree as ETtree = ET.parse("xo.xml")root = tree.getroot()for i in root.iter(‘year‘): #循环所有的year节点    new_year = int( i.text) + 10 # 将year节点中的内容增加十给变量new_year    i.text = str(new_year) #当前循环的节点内容修改为变量new_year    i.set(‘name‘, ‘WU‘) #设置本次循环节点属性name为WU    i.set(‘age‘, ‘25‘) #设置本次循环节点属性age为25    del i.attrib[‘age‘]     # 删除本次循环节点属性age
          
          tree.write("test3.xml", encoding=‘utf-8‘) #上面修改的是内存里的内容所以需要我们去写去到文件中,test3.xml为保存的文件名,写入时使用utf-8编码类型
        • 创建XML文档(方法一)
          from xml.etree import ElementTree as ETroot = ET.Element("hello")# 创建根节点
          
          # 在根节点下创建第一个节点为son1,并且创建属性name值为hello
          
          a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
          
          # 在根节点下创建第二个节点为son2,并且创建属性name值为word
          
          s1 = ET.Element(‘son2‘, {"name": ‘word‘})root.append(a1)   #向跟节点下创建son1root.append(s1)   #向根节点下创建son2
          
          # 在根节点下的第一个节点中继续创建节点,属性name值为Wu
          
          a2 = ET.Element(‘aaaaaa2‘, {‘name‘: ‘Wu‘})
          
          # 在根节点下的第一个节点中继续创建节点,属性name值为Qi
          
          a3 = ET.Element(‘aaaaaa3‘, {‘name‘: ‘Qi‘})a1.append(a2)   #向son节点下创建aaaaaa2a1.append(a3)   #向son节点下创建aaaaaa3tree = ET.ElementTree(root)tree.write(‘test4.xml‘,encoding=‘utf-8‘, short_empty_elements=True)#将内容写入文件test4.xml中使用utf-8编码,如果节点中没有text内容那么就自闭合
        • 创建XML文档(方法二)
          from xml.etree import ElementTree as ET
          
          # 创建根节点
          
          root = ET.Element("famliy")
          
          # 在根节点下创建第一个节点为son1,并且创建属性name值为hello
          
          a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
          
          # 在根节点下创建第二个节点为son2,并且创建属性name值为word
          
          s1 = ET.Element(‘son2‘, {"name": ‘word‘})root.append(a1)   #向跟节点下创建son1root.append(s1)   #向根节点下创建son2
          
          # 在根节点下的第一个节点中继续创建节点age,属性name值为Wu
          
          a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘Wu‘})a2.text = ‘hello‘ #向节点No中添加text内容为helloa1.append(a2)   #向son节点下创建agetree = ET.ElementTree(root)tree.write(‘test4.xml‘,encoding=‘utf-8‘,xml_declaration=True,short_empty_elements=True)#将内容写入文件test4.xml中使用utf-8编码,如果节点中没有text内容那么久自闭合,并且声明xml
        • 如果创建的xml需要自动换行看上去更美观一些使用xml下的dom下的minidom模块
          from xml.etree import ElementTree as ETfrom xml.dom import minidomdef prettify(elem): #创建函数来处理内容,将节点转换成字符串,并添加缩进    a = ET.tostring(elem, ‘utf-8‘)    b = minidom.parseString(a)    return b.toprettyxml(indent="\t")
          
          # 创建根节点
          
          root = ET.Element("famliy")
          
          # 在根节点下创建第一个节点为son1,并且创建属性name值为hello
          
          a1 = ET.Element(‘son‘, {‘name‘: ‘hello‘})
          
          # 在根节点下创建第二个节点为son2,并且创建属性name值为word
          
          s1 = ET.Element(‘son2‘, {"name": ‘word‘})root.append(a1)   #向跟节点下创建son1root.append(s1)   #向根节点下创建son2
          
          # 在根节点下的第一个节点中继续创建节点,属性name值为Wu
          
          a2 = ET.SubElement(a1, "age", attrib={‘name‘: ‘儿11‘})a2.text = ‘孙子‘a1.append(a2)   #向son节点下创建aaaaaa2aaa = prettify(root)#执行这个函数并把节点传进去f = open("test4.xml",‘w‘,encoding=‘utf-8‘)#使用open方法写入并保存退出f.write(aaa)f.close()
        • 命名空间
          1. ##requests
          2. ##logging
          3. ##执行系统命令
          4. ##shutil
时间: 2024-10-06 17:20:03

Python开发Day06的相关文章

为什么越来越多的企业选择使用Python开发?

近来,Python作为一种功能强大且通用的编程语言而广受好评,它具有非常清晰的语法特点,适用于多种操作系统,目前在国际上非常流行,正在得到越来越多的应用.1.简介    Python,是一种面向对象.直译式的计算机程序语言,具有近二十年的发展历史.它包含了一组功能完备的标准库,能够轻松完成很多常见的任务.它的语法简单,与其他大多数程序设计语言使用大括号不同,它使用缩进来定义语句块.    Python支持命令式程序设计.面向对象程序设计.函数式编程.面向侧面的程序设计.范型编程多种编程范式. 2

Windows下Python开发工具推荐

*  如果只是纯Python开发人员,WingIDE 是不二之选. 优点:短小精悍,启动快.调试快.反应快.Auto-completion快. 没有Eclispe的巨大臃肿.反应迟钝.跛脚的调试功能. 快捷键可以在Emacs,VS,Eclipse等之间自己选择. 个人最喜欢的功能是 Debug Probe,简直是交互式开发的利器. Linux和Wingows下都能用,一个安装包搞定. *  如果是Python和C的混合编程,需要进行mixed-mode C/Python debugging, 则

Window上python开发--4.Django的用户登录模块User

在搭建网站和web的应用程序时,用户的登录和管理是几乎是每个网站都必备的.今天主要从一个实例了解以下django本身自带的user模块.本文并不对user进行扩展. 主要使用原生的模块. 1.User模块基础: 在使用user 之前先import到自己的iew中.相当与我们自己写好的models.只不过这个是系统提供的models. from django.contrib.auth.models import User # 导入user模块 1.1User对象属性 User 对象属性:usern

linux 下安装 mysql 并配置 python 开发环境

1.安装 mysql ,安装过程中将提示设置 root 用户的密码,默认可以设置为 rootadmin . $ sudo apt-get install mysql-server 2.安装 mysql 开发工具(不安装时,安装 MySQL-python 提示错误 "mysql_config not found"). $ sudo apt-get install libmysqld-dev 3.安装 python 的 mysql 库 MySQL-python (首先安装 python-d

Python开发【第一篇】:目录

本系列博文改编自武沛齐老师的原创博文,主要包含  Python基础.前端开发.Web框架.缓存以及队列等内容 ,用于学习记录成长!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

Ruby与Python开发的环境IDE配置(附软件的百度云链接)

Ruby开发环境配置 1.Aptana_RadRails(提示功能不好,开发Ruby不推荐) 链接:http://pan.baidu.com/s/1i5q96K1 密码:yt04 2.Aptana Studio3(非常非常好,Ruby和Python开发首选,,和Eclipse使用基本完全一样,提示功能完爆Eclipse,而且界面非常漂亮) 链接:http://pan.baidu.com/s/1cFQr2u 密码:vfc4 教程地址:http://www.cnblogs.com/lsgwr/p/5

visual studio 2015 搭建python开发环境,python入门到精通[三]

在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo,这里略带一句,其实就"学习python"而言,比较建议使用pycharm,pycharm可以设置VS或者eclipse等多种IDE的编码,可以让绝大部分其他语言使用IDE的习惯者更容易上手.这一点兼容确实做的很好.不过既然这么多园友要求使用vs开发python的话,就介绍一下visual

翻译:打造基于Sublime Text 3的全能python开发环境

原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ 原文标题:Setting Up Sublime Text 3 for Full Stack Python Development 翻译:打造基于sublime text 3的全能Python开发环境 Sublime Text 3 (ST3) is lightweight, cross-platfo