❶ python 替换xml中的一行或者两行
a='<Range> 0-229956 </Range>仔好粗'
b="'<Range> 0-(A-1) </Range>'\n'<Range> B-229956 </Range>'"
d=open("a.xml","w")
while 1:
line=d.readline()
if line==a:
replace(a,b)
ifnotline:
break
##如果你的A,B两个值是从终端读取的话在开始read一袜带下就念镇行:
read A
read B
❷ 如何用Python输出漂亮的xml文件
最近要用python处理一个xml文件。平时习惯了用xml.etree.ElementTree,结果发现此库存在一些让人无法忍受的缺点:
1. 无法处理comment和cdata
2. 输出后的xml文件没有换行,没有缩进,十分难以阅读
于是尝试这用xml.dom.minidom,前两个问题几乎全部解决了。唯一让人看着不爽的是minidom对于text的处理。比如,我期待的xml输入如下:
[html]view plain
<prename="code"class="html"><prename="code"class="html"><root>
<host>192.168.0.1</host>
</root>
[html]view plain
<root>
<host>
192.168.0.1
</host>
</root>
[python]埋蔽view plain
defsave_xml(self,file_name):
xml_str=self.m_dom.toprettyxml(indent="")
repl=lambdax:">%s</"%x.group(1).strip()iflen(x.group(1).strip())!=0elsex.group(0)
pretty_str=re.sub(r'> s*([^<]+)</',repl,xml_str)
open(file_name,'w').write(pretty_str)
❸ Python的XML节点替换或字符串替换问题
fpr=open("text.txt")
data=fpr.read()
n=0
for i in range(len(data)):
if data[i]=='/' and data[i+1]=='>'敏宏滑:
n+=1
newdata=data[0:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
k=i
break
for i in range(k+1,len(data)):
if data[i]=='/' and data[i+1]=='>':
n+=1
newdata=newdata+data[i-2:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
newdata+='<绝孝root>'
fpr.close()
fpw=open("newtext.txt","w+")
fpw.write(newdata)
fpw.close()
测试数据:<root>text<a/><a/><a/><root>
输出结果:<桥腊root>text<a1>a1fora</a1><a2>a2fora</a2><a3>a3fora</a3><root>
❹ Python的XML节点替换或字符串替换问题,此为补偿贴,只限luotuo512来回答
两种方法:
old=open("test.xml")
lines=old.readlines()
a="<a/>"
i=1
newlines=[]
for line in lines:
if a in line:
line=line.replace(a,"<a"+str(i)+">a"+str(i)+"拍基for a</a"+str(i)+">")
i=i+1
newlines.append(line)
for line in newlines:
print line
new=open("newtest.xml","w")
new.writelines(newlines)
new.close()
old.close()
结果:
<root>text
<a1>a1for a</a1>
<袭兄谨a2>尘罩a2for a</a2>
<a3>a3for a</a3>
<root>
import xml.dom.minidom
oldxmlfile=open("test.xml")
oldxml=oldxmlfile.read()
oldxmlfile.close()
doc = xml.dom.minidom.parseString(oldxml)
index=1
for node in doc.getElementsByTagName("a"):
node.tagName="a"+str(index)
index=index+1
newxml=doc.toprettyxml()
xmlfile=open("newxml2.xml","w")
xmlfile.write(newxml);
xmlfile.close()
lz是好人。
❺ python中怎么换行
Windows换行符是' ',
Unix/Linux的换行符为' ',
Mac的换行符为' ',
在python中,对换行符进行了统一处理,定义为' 。
❻ xml回车换行转义字符是多少
参考如下内容:
常用的XML转义字符记录如下:
空格: <string name="out_bound_submit">出 库</string> 其中的 就代表空格
换行: <string name="hello_world">你好!\n世界!</string> 其中的\n就代表换行
缩进: <string name="hello_world">你好!\t世界!</string> 其中的\t就代表按一次Tab键的几个空格
应当注意,由于系统定义的基本的缩进的格数不同,有的代表4个半角字符,有的代表8个半角字符,
所以可能显示时效果不同,建议如果编写界面时尽量少用。
❼ python操作xml文件问题
我给你个示例代码,你自己改改增加子节点那一段就好了。
#!/usr/bin/python
# -*- coding=utf-8 -*-
# author : [email protected]
# date: 2012-05-25
# version: 0.1
from xml.etree.ElementTree import ElementTree,Element
def read_xml(in_path):
'''读取并解析xml文件
in_path: xml路径
return: ElementTree'''
tree = ElementTree()
tree.parse(in_path)
return tree
def write_xml(tree, out_path):
'''将xml文件写出
tree: xml树
out_path: 写出路径'''
tree.write(out_path, encoding="utf-8",xml_declaration=True)
def if_match(node, kv_map):
'''判断某个节点是否包含所有传入参数属性
node: 节点
kv_map: 属性及属性值组成的map'''
for key in kv_map:
if node.get(key) != kv_map.get(key):
return False
return True
#---------------search -----
def find_nodes(tree, path):
'''查找某个路径匹配的所有节点
tree: xml树
path: 节点路径'''
return tree.findall(path)
def get_node_by_keyvalue(nodelist, kv_map):
'''根据属性及属性值定位符合的节点,返回节点
nodelist: 节点列表
kv_map: 匹配属性及属性值map'''
result_nodes = []
for node in nodelist:
if if_match(node, kv_map):
result_nodes.append(node)
return result_nodes
#---------------change -----
def change_node_properties(nodelist, kv_map, is_delete=False):
'''修改/增加 /删除 节点的属性及属性值
nodelist: 节点列表
kv_map:属性及属性值map'''
for node in nodelist:
for key in kv_map:
if is_delete:
if key in node.attrib:
del node.attrib[key]
else:
node.set(key, kv_map.get(key))
def change_node_text(nodelist, text, is_add=False, is_delete=False):
'''改变/增加/删除一个节点的文本
nodelist:节点列表
text : 更新后的文本'''
for node in nodelist:
if is_add:
node.text += text
elif is_delete:
node.text = ""
else:
node.text = text
def create_node(tag, property_map, content):
'''新造一个节点
tag:节点标签
property_map:属性及属性值map
content: 节点闭合标签里的文本内容
return 新节点'''
element = Element(tag, property_map)
element.text = content
return element
def add_child_node(nodelist, element):
'''给一个节点添加子节点
nodelist: 节点列表
element: 子节点'''
for node in nodelist:
node.append(element)
def del_node_by_tagkeyvalue(nodelist, tag, kv_map):
'''同过属性及属性值定位一个节点,并删除之
nodelist: 父节点列表
tag:子节点标签
kv_map: 属性及属性值列表'''
for parent_node in nodelist:
children = parent_node.getchildren()
for child in children:
if child.tag == tag and if_match(child, kv_map):
parent_node.remove(child)
if __name__ == "__main__":
#1. 读取xml文件
tree = read_xml("./test.xml")
#2. 属性修改
#A. 找到父节点
nodes = find_nodes(tree, "processers/processer")
#B. 通过属性准确定位子节点
result_nodes = get_node_by_keyvalue(nodes, {"name":"BProcesser"})
#C. 修改节点属性
change_node_properties(result_nodes, {"age": "1"})
#D. 删除节点属性
change_node_properties(result_nodes, {"value":""}, True)
#3. 节点修改
#A.新建节点
a = create_node("person", {"age":"15","money":"200000"}, "this is the firest content")
#B.插入到父节点之下
add_child_node(result_nodes, a)
#4. 删除节点
#定位父节点
del_parent_nodes = find_nodes(tree, "processers/services/service")
#准确定位子节点并删除之
target_del_node = del_node_by_tagkeyvalue(del_parent_nodes, "chain", {"sequency" : "chain1"})
#5. 修改节点文本
#定位节点
text_nodes = get_node_by_keyvalue(find_nodes(tree, "processers/services/service/chain"), {"sequency":"chain3"})
change_node_text(text_nodes, "new text")
#6. 输出到结果文件
write_xml(tree, "./out.xml")
❽ 如何用python操作xml文件,用dom
用replace应该可以的
xml = string.replace(xml, "<string name="version_string">(.*)</string>团隐", "<string name="version_string">(你想链雀要的棚或早东西)</string>")
❾ python写xml中文本节点怎么才能不换行
1、在python 2.x中,在print 'xxxx' 后面加一个逗号
print 'hello world',
2、python 3.x中,需要在函数内增加一个end字段:
print('hello world', end='')
❿ 初学Python求助Python解析xml
1. 我上面这段xml代码,一开始没有注意看,在每一个元素的结尾元素中都含有转义符,这就是为什么我用xml解析丛冲插件时一直保报错的原因,因为他不是正规的xml格式。穗肢我的方法是用正则替换掉:re.sub(r'(<)\\(/.+?>)',r'\g<1>\g<2>',f_xml) 对于Python中的正则re的sub用法
2. 处理成正规的xml格式后,我这里还是用ElementTree来解析的,但在加载时又报错:
cElementTree.ParseError: XML or text declaration not at start of entity: line 2, column 0
这个错误我在网上没有找到合适的答案,不过根据字面意思来解决,就是在开头的地方有错误。这里我尝试这吧xml的文档声明给去掉了,居然没有报错渗族歼。这里有些不理解为什么不能加? 我的方法:f_xml=test_xml.replace('<?xml version="1.0" encoding="gbk"?>','')
3. 然后再加载,就能获取到相应的节点了。