Python条件XML编写
我正在使用Python将CSV文件转换为XML格式。CSV文件有不同数量的行,范围从2到无限,包括标题。实际上是10-15,但除非有一些主要的性能问题,我想介绍一下我的基础,以便转换文件,我有以下代码: 对于csvData中的行: 如果rowNum==0: xmlData。写入“”+\n 标记=行 替换标记名中带下划线的空格 对于rangelentags中的i: 标记[i]=标记[i]。替换“”,'' 如果rowNum==1: 对于rangelentags中的i: xmlData.write“”+\ +行[i]++\n xmlData.write'+\n+'+\n 如果rowNum==2: 对于rangelentags中的i: xmlData.write“”+\ +行[i]++\n xmlData。写入“”+\n 如果rowNum==3: 对于rangelentags中的i: xmlData.write+\n+''+\ +行[i]++\n xmlData。写入“”+\n rowNum+=1 xmlData.write+\n xmlData.close 如您所见,如果行存在,我将上层标记设置为手动创建。有没有更有效的方法来实现我创建标记的目标,而不是重复我的代码15次以上?谢谢 我将使用或来编写XML。xml.etree.ElementTree位于标准库中,但没有内置的打印功能。但是,您可以从中使用缩进函数 etree是一个第三方模块,但它在tostring方法中内置了漂亮的打印 使用lxml.etree,您可以执行以下操作:Python条件XML编写,python,xml,Python,Xml,我正在使用Python将CSV文件转换为XML格式。CSV文件有不同数量的行,范围从2到无限,包括标题。实际上是10-15,但除非有一些主要的性能问题,我想介绍一下我的基础,以便转换文件,我有以下代码: 对于csvData中的行: 如果rowNum==0: xmlData。写入“”+\n 标记=行 替换标记名中带下划线的空格 对于rangelentags中的i: 标记[i]=标记[i]。替换“”,'' 如果rowNum==1: 对于rangelentags中的i: xmlData.write“”
import lxml.etree as ET
csvData = [['foo bar', 'baz quux'],['bing bang', 'bim bop', 'bip burp'],]
csvFile = 'rowboat'
name = csvFile[:-4]
root = ET.Element('csv_data')
for num, tags in enumerate(csvData):
row = ET.SubElement(root, '{f}-{n}'.format(f = name, n = num))
for text in tags:
text = text.replace(' ', '_')
tag = ET.SubElement(row, text)
tag.text = text
print(ET.tostring(root, pretty_print = True))
屈服
<csv_data>
<row-0>
<foo_bar>foo_bar</foo_bar>
<baz_quux>baz_quux</baz_quux>
</row-0>
<row-1>
<bing_bang>bing_bang</bing_bang>
<bim_bop>bim_bop</bim_bop>
<bip_burp>bip_burp</bip_burp>
</row-1>
</csv_data>
而是说
for tag in tags:
循环标记中的所有项目
也不是通过循环手动计算时间,而是使用
num = 0
for tags in csvData:
num += 1
而是使用以下功能:
for num, tags in enumerate(csvData):
弦状
' ' + '<' + tags[i] + '>' \
+ row[i] + '</' + tags[i] + '>' + "\n"
非常难读。它把逻辑混合在一起
缩进,带有标记的XML语法,以及
行字符。这就是xml.etree.ElementTree或lxml.etree的位置
我会帮助你的。它将负责XML的序列化
你您只需要提供XML元素之间的关系。
代码将更具可读性,更易于维护
我将使用或来编写XML。xml.etree.ElementTree位于标准库中,但没有内置的打印功能。但是,您可以从中使用缩进函数
etree是一个第三方模块,但它在tostring方法中内置了漂亮的打印
使用lxml.etree,您可以执行以下操作:
import lxml.etree as ET
csvData = [['foo bar', 'baz quux'],['bing bang', 'bim bop', 'bip burp'],]
csvFile = 'rowboat'
name = csvFile[:-4]
root = ET.Element('csv_data')
for num, tags in enumerate(csvData):
row = ET.SubElement(root, '{f}-{n}'.format(f = name, n = num))
for text in tags:
text = text.replace(' ', '_')
tag = ET.SubElement(row, text)
tag.text = text
print(ET.tostring(root, pretty_print = True))
屈服
<csv_data>
<row-0>
<foo_bar>foo_bar</foo_bar>
<baz_quux>baz_quux</baz_quux>
</row-0>
<row-1>
<bing_bang>bing_bang</bing_bang>
<bim_bop>bim_bop</bim_bop>
<bip_burp>bip_burp</bip_burp>
</row-1>
</csv_data>
而是说
for tag in tags:
循环标记中的所有项目
也不是通过循环手动计算时间,而是使用
num = 0
for tags in csvData:
num += 1
而是使用以下功能:
for num, tags in enumerate(csvData):
弦状
' ' + '<' + tags[i] + '>' \
+ row[i] + '</' + tags[i] + '>' + "\n"
非常难读。它把逻辑混合在一起
缩进,带有标记的XML语法,以及
行字符。这就是xml.etree.ElementTree或lxml.etree的位置
我会帮助你的。它将负责XML的序列化
你您只需要提供XML元素之间的关系。
代码将更具可读性,更易于维护
反应很好,谢谢!我的代码一分钟比一分钟干净!反应很好,谢谢!我的代码一分钟比一分钟干净!