[xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]

  • xml模块

XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数据能让对方看懂 就需要按照一定的语法规范来书写,xml跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是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数据

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:

# print(root.iter('year'))  # 全文搜索
# print(root.find('country')) # 在root的子节点找,只找一个
# print(root.findall('country')) # 在root的子节点找,找所有
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag) #遍历xml文档
for child in root:
print('========>',child.tag,child.attrib,child.attrib['name'])
for i in child:
print(i.tag,i.attrib,i.text) #只遍历year 节点
for node in root.iter('year'):
print(node.tag,node.text)
#--------------------------------------- import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml")
root = tree.getroot() #修改
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') #删除node
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country) tree.write('output.xml')
#在country内添加(append)节点year2
import xml.etree.ElementTree as ET
tree = ET.parse("a.xml")
root=tree.getroot()
for country in root.findall('country'):
for year in country.findall('year'):
if int(year.text) > 2000:
year2=ET.Element('year2')
year2.text='新年'
year2.attrib={'update':'yes'}
country.append(year2) #往country节点下添加子节点 tree.write('a.xml.swap')

自己创建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) #打印生成的格式
----------------------------------------------------------------------------------------------------------------------------------------------------------
  • hashlib模块

hash算法:传入一段内容会得到一串hash值

hash值有三大特点:

1.如果传入的内容与采用的算法一样,那么得到的hash值一定一样
2.只要采用的算法是固定的,hash值的长度就是固定的,不会随着内容的增多而变长
3.hash值不可逆,即不能通过hash值反解出内容是什么
1 + 2 = 》效验文件的完整性
1 + 3 = 》加密
# 传入的内容与采用的算法一样,得到的hash值一定一样
import hashlib m = hashlib.md5()
m.update("你好".encode('utf-8'))
m.update("hello".encode('utf-8'))
m.update("哈哈".encode('utf-8')) # "你好hello哈哈" # hash工厂计算的是它的值
print(m.hexdigest()) # 43b2fa0da902a2d9175fb4d4b858e5d5 m1 = hashlib.md5()
m1.update("你".encode('utf-8'))
m1.update("好hello".encode('utf-8'))
m1.update("哈".encode('utf-8')) # "你好hello哈哈"
print(m1.hexdigest()) # 43b2fa0da902a2d9175fb4d4b858e5d5 # 效验文件完整性
import hashlib
m = hashlib.md5() with open(r'D:\python17\day16\代码.zip',mode='rb') as f:
for line in f:
m.update(line)
res = m.hexdigest()
print(res) import hashlib
m = hashlib.md5() m.update("天王".encode('utf-8')) # 密码加盐
m.update("123egon".encode('utf-8'))
m.update("盖地虎".encode('utf-8'))
print(m.hexdigest())
-------------------------------------------------------------------------------------------------------------------------------------------------------
  • subprocess模块

即允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,
获取标准的输入、标准输出、标准错误以及返回码等。

注意:使用这个模块之前要先引入该模块。

Popen类

subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互。

import subprocess
import time
# “Tasklist”命令是一个用来查看运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。
# Popen 等同于cmd.exe命令解释器
obj = subprocess.Popen("tasklist",
# shell=True等同于调用命令解释器
shell=True,
# 管道内存正确输出结果
stdout=subprocess.PIPE,
# 管道内存错误输出结果
stderr=subprocess.PIPE
) print("=============>", obj) # 拿到的是subprocess的对象
# =============> <subprocess.Popen object at 0x00000193E7E04BB0> # 主进程从管道拿到子进程结果
stdout_res = obj.stdout.read()
stderr_res = obj.stderr.read() # subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码
print(stdout_res.decode('gbk'))
print(stderr_res.decode('gbk')) # 主进程想拿到子进程运行命令的结果做进一步的处理
# 每启动一个进程在内存里占用一个内存空间,进程与进程之间的内存空间是相互隔离的
# 在子进程运行Tasklist这条命令,运行完之后这条命令的结果一定是产生在子进程的内存空间里
# 不可能在主进程拿到这个结果,这个就要用到共享内存了,即“管道”
---------------------------------------------------------------------------------------------------------------------------------------------
  • os与sys模块

  • os模块

这个模块提供了一种方便的bai使用操作系统函du数的方法。
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
os的用法演示
import os

print(os.getcwd()) # 获取当前工作所在文件夹
os.makedirs("a/b/c") # 递归创建文件夹
os.removedirs("a/b/c") # 递归删除文件夹 res = os.listdir('.') # 浏览当前文件夹列表显示
print(res) print(os.stat("今日内容.txt")) # 查看文件信息 print(os.path.getsize("今日内容.txt")) # 获取文件的大小以字节显示 print(os.environ) # 环境变量
os.environ["name"] = "egon"
print(os.environ)
print(os.environ['name']) print(os.path.abspath("a/b/c")) # 返回path规范化的绝对路径
print(os.path.split(r"D:\a\b\c\d.txt")) #
print(os.path.dirname(r"D:\a\b\c\d.txt"))
print(os.path.basename(r"D:\a\b\c\d.txt")) res = os.path.exists(r"D:\a\b")
print(res) print(os.path.isabs(r"D:\a\b\c\d.txt"))
print(os.path.isabs(r"c\d.txt")) print(os.path.join("D:",'a',"b","c.txt")) # os路径处理
# 方式一:
# 获取路径文件夹---》获取当前文件夹的上一级文件夹
print(os.path.dirname(os.path.dirname(__file__))) # 方式二:
res = os.path.normpath(os.path.join(__file__,"..",'..'))
print(res)
  • sys模块

    这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函
    sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境
    1 sys.argv           命令行参数List,第一个元素是程序本身路径
    2 sys.exit(n) 退出程序,正常退出时exit(0)
    3 sys.version 获取Python解释程序的版本信息
    4 sys.maxint 最大的Int值
    5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    6 sys.platform 返回操作系统平台名称 import sys # print(sys.argv) # sys.argv 从命令行中接收用户输入 src_file = sys.argv[1]
    dst_file = sys.argv[2] with open(r'%s' %src_file,mode='rb') as f1,\
    open(r'%s' %dst_file,mode='wb') as f2:
    for line in f1:
    f2.write(line)

    打印进度条

    #=========知识储备==========
    #进度条的效果
    [# ]
    [## ]
    [### ]
    [#### ] #指定宽度
    print('[%-15s]' %'#')
    print('[%-15s]' %'##')
    print('[%-15s]' %'###')
    print('[%-15s]' %'####') #打印%
    print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义 #可传参来控制宽度
    print('[%%-%ds]' %50) #[%-50s]
    print(('[%%-%ds]' %50) %'#')
    print(('[%%-%ds]' %50) %'##')
    print(('[%%-%ds]' %50) %'###') #=========实现打印进度条函数==========
    import sys
    import time def progress(percent,width=50):
    if percent >= 1:
    percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
    print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='') #=========应用==========
    data_size=1025
    recv_size=0
    while recv_size < data_size:
    time.sleep(0.1) #模拟数据的传输延迟
    recv_size+=1024 #每次收1024 percent=recv_size/data_size #接收的比例
    progress(percent,width=70) #进度条的宽度70
    ----------------------------------------------------------------------------------------------------------------------------------------
  • configparser模块

    该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),
    每个节可以有多个参数(键=值)。节与java原先的配置文件相同的格式
    • 配置文件:
    # config.ini 配置文件
    
    # 注释1
    ; 注释2 [mysqld] # 标题
    k1 = v1 # 配置项 key:value的形式
    k2:v2
    user=egon
    age=18
    is_admin=true
    salary=31
    log_path = D:\a\b\c.log [client]
    k1 = v1
    • 解析配置文件
    # configparser模块  #  用来解析配置文件的
    
    import configparser
    
    config = configparser.ConfigParser()  # 返回一个对象
    config.read('config.ini') #,用这个对象执行.read(配置文件) res = config.sections() # 拿到config.ini配置文件下所有的标题
    print(res) res = config.options('mysqld') # 拿到标题mysqld下所有配置项key=value的key res = config.items('mysqld') # 拿到标题mysqld下所有配置项key=value的(key,value)格式
    print(res) res = config.get('mysqld', 'log_path') # 指定拿到标题mysqld下log_path日志的路径
    print(res) res = config.getint('mysqld', 'age') # 拿到标题mysqld下age的值=>整数格式 res = config.getboolean('mysqld', 'is_admin') #拿到标题mysqld下is_admin的值=>布尔值格式
    print(res,type(res)) res = conf.getfloat('mysqld','salary') # 拿到标题mysqld下salary的值=>浮点型格式
    print(res)

[xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]的更多相关文章

  1. Python内置模块之time、random、hashlib、OS、sys、UUID模块

    Python常用模块 1.time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间 ...

  2. Python (time、datetime、random、os、sys、shutil)模块的使用

    ######################################################### 模块time ################################### ...

  3. Python之常用模块(re,时间,random,os,sys,序列化模块)(Day20)

    一.时间模块 #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取当前时间戳 在Python中表示时间的三种方式:时间戳,元组(s ...

  4. os、sys和shutil模块

    运行环境:python3 OS模块:os 模块提供了一个统一的操作系统的接口函数 下面的path指路径的意思 os.stat(file) #查询文件属性操作 os.sep #取代操作系统特定的路径分隔 ...

  5. python之os、sys和random模块

    import os # print(os.getcwd())#获取当前目录,绝对路径# print(os.chdir('../'))#更改当前目录,../的意思是退回上一级目录# print(os.g ...

  6. python常用模块---collections、time、random、os、sys、序列号模块

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  7. Python 常用方法和模块的使用(time & datetime & os &random &sys &shutil)-(六)

    1 比较常用的一些方法 1.eval()方法:执行字符串表达式,并返回到字符串. 2.序列化:变量从内存中变成可存储或传输到文件或变量的过程,可以保存当时对象的状态,实现其生命周期的延长,并且需要时可 ...

  8. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  9. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

随机推荐

  1. 攻防世界 reverse Windows_Reverse1

    Windows_Reverse1  2019_DDCTF 查壳 脱壳 脱壳后运行闪退,(或许需要修复下IAT??),先IDA 静态分析一下 int __cdecl main(int argc, con ...

  2. C# - 实现类型的比较

    IComparable<T> .NET 里,IComparable<T>是用来作比较的最常用接口. 如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可 ...

  3. Redis实战篇(三)基于HyperLogLog实现UV统计功能

    如果现在要开发一个功能: 统计APP或网页的一个页面,每天有多少用户点击进入的次数.同一个用户的反复点击进入记为 1 次,也就是统计 UV 数据. 让你来开发这个统计模块,你会如何实现? 如果统计 P ...

  4. 此博客使用的CSS样式详解!

    此博客使用的CSS样式详解! 页面使用的博客园模板为:LuxInteriorLight,可以在博客皮肤里找到. 页首屏蔽广告代码 <script>console.log("顶部标 ...

  5. Redis系列-存储篇string主要操作命令

    Redis系列-存储篇string主要操作命令 通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简 ...

  6. SQL语句练习(基础版)

    最近在学习SQL基本语句的练习,在此分享一下笔者做过的练习以及个人的解决教程: 首先是基本练习表格的搭建,具体内容如下表所示: Snum Sname Ssex Sage Sphone Dname S0 ...

  7. BLE链路层空中包格式

    空中包格式 BLE链路层的空中包格式非常简单,它所有的空中包都遵循下图所示的格式: 有上图可见,BLE空中包由4个部分组成,他们分别是: 前导码(Preamble) 访问地址(Access Addre ...

  8. 模拟退火算法Python编程(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

  9. 1149 Dangerous Goods Packaging

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  10. ASP封装DLL 直接上代码

    ASP转DLL 基本引用类库 OLE Automation Com+ services Type Library Microsoft Active Server Pages Object Micros ...