功能:

1.将xml中多余的空格,换行符去掉,让xml字符串变成一行。

2.将xml中添加缩进,使用print能正确打印添加缩进后的字符串。

思路:

采用正则表达式来判断xml中字符串的类型:

1.文件头

2.判断元素的种类:带有属性的标签,没有属性的标签,标签内结束的标签,只含有文本的标签,不含有文本的标签。

3.根据标签的级别添加换行符后面的空格

  1. '\n'+i*' '

已经完成,使用python与正则表达式。

  1. import re
  2. def getData(file_name):
  3. path="D:\\Python\\xml\\"+file_name+".txt"
  4. str=''
  5. with open(path,'r',encoding='utf-8') as f:
  6. for line in f.readlines():
  7. str=str+line
  8. return str.strip()
  9.  
  10. def getSpace(level):
  11. space='\n'
  12. for i in range(level):
  13. space=space+' '
  14. return space
  15.  
  16. def printXml(xml_str):
  17.  
  18. #xml_list=xml_str.split('([>])')
  19. new_xml_list=""
  20. head=xml_str[0:9]
  21. xml_str=xml_str[9:]
  22. xml_list=re.split(r'([>])',xml_str)
  23. xml_list = ["".join(i) for i in zip(xml_list[0::2],xml_list[1::2])]
  24. level=0
  25. for node in xml_list:
  26. if(re.match(r'<\?xml .*version.*\?>',node)):
  27. new_xml_list=new_xml_list+new_xml_list+node
  28. continue
  29. elif(re.match(r'<[^\?^/].*[^/]>',node)):
  30. new_xml_list=new_xml_list+getSpace(level)+node
  31. level=level+1
  32. continue
  33. elif(re.match(r'</.*[^/]>',node)):
  34. level=level-1
  35. new_xml_list=new_xml_list+getSpace(level)+node
  36. continue
  37. elif(re.match(r'<[^/].*/>',node)):
  38. new_xml_list=new_xml_list+getSpace(level)+node
  39. elif(re.match(r'.+</.*[^/]>',node)):
  40. new_xml_list=new_xml_list+node
  41. level=level-1
  42. else:
  43. print(node)
  44.  
  45. print(new_xml_list)
  46.  
  47. def main():
  48. xml_str=getData('')
  49. printXml(xml_str)
  50.  
  51. main()

任务备忘(已经完成):用python写一个格式化xml字符串的程序的更多相关文章

  1. 使用python写一个最基本的mapreduce程序

    一个mapreduce程序大致分成三个部分,第一部分是mapper文件,第二个就是reducer文件,第三部分就是使用hadoop command 执行程序. 在这个过程中,困惑我最久的一个问题就是在 ...

  2. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  3. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  4. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  5. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  6. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  7. 用python写一个自动化盲注脚本

    前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...

  8. python写一个能变身电光耗子的贪吃蛇

    python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...

  9. 使用Python写的第一个网络爬虫程序

    今天尝试使用python写一个网络爬虫代码,主要是想訪问某个站点,从中选取感兴趣的信息,并将信息依照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,因为对python不 ...

随机推荐

  1. CoreBluetooth Central模式 Swift版

    也是醉了,CB这个API到现在也没有Swift的文档.最新的文档还是3年前还是4年前的OC版的,被雷的外焦里嫩的.自己一点一点写成Swift还各种报错,最坑的是这些错误压根找不到解决方案.索性自己做个 ...

  2. poj3069【贪心,水】

    妈蛋,题意看错-看了挑战时被标记的点还是给出的点,瞎搞了半个多小时... = =都想气的扔进水题系列了 #include <iostream> #include <cstdio> ...

  3. poj 1988 Cube Stacking【带权并查集】

    设s[x]为x所在栈里的个数,c[x]表示x下面有几个,合并的时候直接合并s,然后路径压缩的时候更新c即可 #include<iostream> #include<cstdio> ...

  4. IT兄弟连 Java Web教程 经典面试题

    1.什么是B/S结构?什么是C/S结构? B/S是Browser/Server的缩写客户机上只要安装—个浏览器(Browser)加Netscape Navigator或Internet Explore ...

  5. 运行scrapyd报错

    转自:    https://blog.csdn.net/qq_29719097/article/details/89431234 web.Server Traceback (most recent ...

  6. 怎么让普通用户达到root用户也可以拥有权限修改文件(CentOS系统)

    为什么会提出这个问题呢? 答:因为啊,比如我们在大数据集群搭建的时候,经常会需要配置环境变量,如/etc/profile.那么,问题来了,每次必须得都切换到root用户才能,但是呢,如何可以在普通用户 ...

  7. ssh公私密钥的生成

    ssh密钥的生成 root账号密钥的生成: 这里我们切换到root账号下,执行ssh-keygen命令: ssh-keygen -t dsa 然后一路回车即可 """ [ ...

  8. Hdu 3966 Aragorn's Story (树链剖分 + 线段树区间更新)

    题目链接: Hdu 3966 Aragorn's Story 题目描述: 给出一个树,每个节点都有一个权值,有三种操作: 1:( I, i, j, x ) 从i到j的路径上经过的节点全部都加上x: 2 ...

  9. sh 脚本报错

    sh 脚本报错 思路如下: 1.建议按照手工方式运行该脚本. 2.加入-x 方式查看脚本的输出.

  10. 生产环境中nginx既做web服务又做反向代理

    一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现 ...