第七章 常用模块&面向对象程序设计

一、xml模块

<?xml version="1.0"?>

-<data>

-<country name="Liechtenstein" a="1">

<rank updated="yes">2</rank>

<year updated="yes" version="1.0">2010</year>

<gdppc>141100</gdppc>

<neighbor name="Austria" direction="E"/>

<neighbor name="Switzerland" direction="W"/>

<egon age="18">hello</egon>

</country>

-<country name="Singapore">

<rank updated="yes">5</rank>

<year updated="yes" version="1.0">2013</year>

<gdppc>59900</gdppc>

<neighbor name="Malaysia" direction="N"/>

<egon age="18">hello</egon>

</country>

-<country name="Panama">

<year updated="yes" version="1.0">2013</year>

<gdppc>13600</gdppc>

<neighbor name="Costa Rica" direction="W"/>

<neighbor name="Colombia" direction="E"/>

<egon age="18">hello</egon>

</country>

</data>

import xml.etree.ElementTree as ETtree=ET.parse(‘a.xml‘)root=tree.getroot()

for child in root:  print(child)  for i in child:    print(i.tag,i.attrib,i.text)  #标签名,属性,内容

years=root.iter(‘year’)   #扫描整个xml文档树,找到所有for i in years:  print(i)-------------------------------------------------------------------

res1=root.find(‘country’)  #谁来调,就从谁下一层开始找,只找一个print(res1)res2=root.findall(‘country’) #谁来调,就从谁下一层开始找,找出全部

print(res2)
-------------------------------------------------------------------

修改years=root.iter(‘year’)for year in years:  year.text=str(int(year.text)+1)   #将year的内容加1  year.set(‘updated’,‘yes’)      #将year标签添加属性  year.set(‘version’,‘1.0’)

tree.write(‘a.xml’)
-------------------------------------------------------------------

删除
for county in root.iter(‘country‘):  #找到所有country    # print(county.tag)    rank=county.find(‘rank‘)    #查看country下面有没有rank    if int(rank.text) > 10:    #删除rank内容大于10的        county.remove(rank)tree.write(‘a.xml‘)-------------------------------------------------------------------增加节点
for county in root.iter(‘country‘):    e=ET.Element(‘egon‘)    #添加egon的标签    e.text=‘hello‘    e.attrib={‘age‘:‘18‘}    county.append(e)

tree.write(‘a.xml‘)

二、configparser模块

[egon]
name = egon

age = 18

is_admin = True

salary = 3.1


[alex]
name = alex

age = 38

is_admin = False

取配置
print(config.sections()) #看标题
print(config.options(config.sections()[0])) #查看某个标题下的配置项
res=config.get(‘alex‘,‘name‘)#查看某个标题下的某个配置项的值print(type(res))
res1=config.getint(‘egon‘,‘age‘)#查看某个标题下的某个配置项的整数值print(type(res1))res1=config.getboolean(‘egon‘,‘is_admin‘)#查看某个标题下的某个配置项的布偶值print(type(res1))res1=config.getfloat(‘egon‘,‘salary‘)#查看某个标题下的某个配置项的浮点值print(type(res1))
修改config.remove_section(‘alex‘)      #删除alex标题config.remove_option(‘egon‘,‘age‘)    #删除egon标题下的age配置config.add_section(‘alex‘)         #添加alex标题config.set(‘alex‘,‘name‘,‘SB‘)      #添加alex标题下name配置项,内容为SBconfig.write(open(‘a.ini‘,‘w‘))        #保存

三、hashlib模块hash:一种算法,3.x里代替了md5模块和sha模块三个特点:1.内容相同则hash运算结果相同,内容稍微改变则hash值则变2.不可逆推3.相同算法:无论校验多长的数据,得到的哈希值长度固定
import hashlib
m=hashlib.md5()
m.update(‘hello‘.encode(‘utf-8‘))m.update(‘world‘.encode(‘utf-8‘))print(m.hexdigest())

m=hashlib.md5()m.update(‘helloworld‘.encode(‘utf-8‘))print(m.hexdigest())

m=hashlib.md5(‘helloworld‘.encode(‘utf-8‘))print(m.hexdigest())

m=hashlib.md5(‘h‘.encode(‘utf-8‘))m.update(‘elloworld‘.encode(‘utf-8‘))print(m.hexdigest())

m=hashlib.md5()with open(‘a.xml‘,‘rb‘) as f:    for line in f:        m.update(line)print(m.hexdigest())

耗费内存不推荐使用,文件大会撑爆内存m=hashlib.md5()with open(‘a.xml‘,‘rb‘) as f:    m.update(f.read())print(m.hexdigest())

加盐password=‘alex3714‘m=hashlib.md5(‘yihangbailushangqingtian‘.encode(‘utf-8‘))m.update(password.encode(‘utf-8‘))passwd_md5=m.hexdigest()print(passwd_md5)

import hmac必须保证初始值一样,hash值才一样,也就是必须都是hello,强制加盐h=hmac.new(‘hello‘.encode(‘utf-8‘))h.update(‘world‘.encode(‘utf-8‘))print(h.hexdigest())

h=hmac.new(‘hello‘.encode(‘utf-8‘))h.update(‘w‘.encode(‘utf-8‘))h.update(‘or‘.encode(‘utf-8‘))h.update(‘ld‘.encode(‘utf-8‘))print(h.hexdigest())

四、subprocess模块
import subprocess

res=subprocess.Popen(r‘deeddddir D:\04-视频录制存放目录\python18期\day7\xml模块‘,                     shell=True,                     stdout=subprocess.PIPE,                     stderr=subprocess.PIPE)print(‘-========>‘,res.stderr.read().decode(‘gbk‘))
 
#dir file_path | findstr xml$res1=subprocess.Popen(r‘dir D:\04-视频录制存放目录\python18期\day7\xml模块‘,                     shell=True,                     stdout=subprocess.PIPE,)# stdin=res1.stoutres2=subprocess.Popen(r‘findstr xml$‘,                     shell=True,                     stdin=res1.stdout,                     stdout=subprocess.PIPE,)print(res2.stdout.read().decode(‘gbk‘))
 
 





 
时间: 2024-11-07 18:19:55

第七章 常用模块&面向对象程序设计的相关文章

第九章 常用模块

第九章 常用模块 1.模块介绍 什么是模块: 模块就是我们通常说的py文件(因此写python程序的时候不要命名为模块的名称),模块是写好了但不直接使用的功能 为什么这些模块中提供的方法 不能像print这些内置函数一样直接使用呢? 是因为如果所有的模块都是执行python程序直接导入了,会非常占用内存空间的 常见导入模块的方法 1.import time 2.from time import sleep 模块的分类: 内置模块 扩展模块 https://pypi.org 自定义模块 2.扩展数

第九章 常用模块(续)

1.序列化模块 1.1 什么叫序列化 例:有一个班级信息字典{'10010000':{'name':'zhangsan', 'age':22, 'class':'python21'},...},在程序结束后需要保存,而在python中只有字符串能保存到文件中.再次使用字典的时候,可以使用eval转化,但是非常不安全,所以引入了序列化 序列化就是 数据类型转化成字符串的过程 -- 数据类型 --> 字符串的过程 字符串化也叫做序列化 1.2 为什么要用序列化呢?(固态存储.网络传输) 数据从内存到

JavaSE习题 第七章 常用实用类

问答题 1.怎样实例化一个Calendar对象? Calendar ca=Calendar.getInstance(); 2.Calendar对象调用set(1949,9,1)设置的年月日分别是多少? 就是1949,9,1 3.怎样得到一个1-100的随机数? int a=(int) (Math.random()*100+1); //或者 Random ra=new Random(); int b=ra.nextInt(100)+1; 4.有集合{1,2,3,4}和集合{1,3,7,9,11}编

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int

王颖奇 201771010129《面向对象程序设计(java)》第七章学习总结

实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: A.仅对本类可见-private B.对所有类可见-public C.对本包和所有子类可见-protected D.对本包可见-默认,,不需要修饰符 (2)掌握Object类的常用API用法: equals方法:检测一个对象是否等于另一个对象(不同于==) hasCode方法:获得散列码(其值为对象的存储地址) toString方法:它用于返回对象值的字符串 (3)掌握Arr

python_day06 常用模块xml/configparser/hashlib/subprocess 面向对象程序设计

常用模块shutilxmlconfigparserhashlibsuprocess面向对象的程序设计 常用模块 xml模块 1 <?xml version="1.0"?> 2 <data> 3 <country name="Liechtenstein"> 4 <rank updated="yes">2</rank> 5 <year>2008</year> 6 &l

常惠琢 201771010102《面向对象程序设计(java)》第七周学习总结

实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合本章知识,理解继承与多态性两个面向对象程序设计特征,并体会其优点: (6)熟练掌握Java语言中基于类.继承技术构造程序的语法知识(ch1-ch5): (7)利用已掌握Java语言程序设计知识,学习设计开发含有1个主类.2个以上用户自定义类的应用

刘志梅 201771010115 《面向对象程序设计(java)》 第七周学习总结

实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: 即将类中的域标记为private,而方法标记为public.任何声明为private的内容对其他类都是不可见的.超类中的某些方法允许被子类访问,或允许子类的方法访问超类的某个域,此时将这些方法或域声明为protected. 1.仅对本类可见--private    2.对所有类可见--public   3.对本包和所有子类可见--protected    4.对本包可见--默

冯志霞201771010107《面向对象程序设计(java)》第七周学习总结

实验七继承附加实验 实验时间 2018-10-11 类是否覆盖equals()方法",将它分为2类.(1) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象.这时,等价于通过"=="去比较这两个对象.(2) 我们可以覆盖类的equals()方法,来让equals()通过其它方式比较两个对象是否相等.通常的做法是:若两个对象的内容相等,则equals()方法返回true:否则,返回fasle. 1.实验目的与要