将Python文本文件转换为XML

4

我有一个关于将文本文件转换为XML的问题。我已经完成了文本文件的良好转换,它看起来像:

Program: 5 Start: 2013-09-11 05:30:00 Duration 06:15:00 Title: INFOCANALE

我的XML输出将会像这样:
<data>
  <eg>
    <program>Program 5</program>
    <start>2013-09-11 05:30:00</start>
    <duration>06:15:00</duration>
    <title>INFOCANALE</title>
  </eg>
</dat‌​a>

Python能够将文本文件转换为XML吗?
您可以帮我提供一些建议或者代码。


我的文本如下: 程序: 5
开始时间: 2013-09-11 05:30:00 持续时间: 06:15:00 标题: INFOCANALE
- Marin
我的输出将会是这样的:<data><eg><program>程序 5</program><start>2013-09-11 05:30:00</start><duration>06:15:00</duration><title>INFOCANALE</title></eg></data> - Marin
1
你的文件格式是固定的还是可以更改的?至少你可以在每个值后面加上分号,这样解析会更容易。 - Roman Pekar
重复内容:http://stackoverflow.com/questions/17068536/using-argparse-to-convert-csv-to-xml-in-python - rags
我可以更改我的文本文件,并将其重命名为任何名称。 - Marin
1个回答

2

我认为最简单的方法是将您的文件转换为如下格式的csv文件:

Program,Start,Duration,Title
5,2013-09-11 05:30:00,06:15:00,INFOCANALE

然后按以下方式进行转换:
from lxml import etree
import csv

root = etree.Element('data')

rdr = csv.reader(open("your file name here"))
header = rdr.next()
for row in rdr:
    eg = etree.SubElement(root, 'eg')
    for h, v in zip(header, row):
        etree.SubElement(eg, h).text = v

f = open(r"C:\temp\data2.xml", "w")
f.write(etree.tostring(root))
f.close()

# you also can use
# etree.ElementTree(root).write(open(r"C:\temp\data2.xml", "w"))

追踪(最近的调用在最上面): 文件“./epg.py”,第53行,在<module>中: etree.SubElement(eg, h).text = v 文件“lxml.etree.pyx”,第2659行,lxml.etree.SubElement(src / lxml / lxml.etree.c:53668) 文件“apihelpers.pxi”,第204行,lxml.etree._makeSubElement(src / lxml / lxml.etree.c:12230) 文件“apihelpers.pxi”,第1542行,lxml.etree._tagValidOrRaise(src / lxml / lxml.etree.c:23956) ValueError:无效的标记名称u' Program 10 ' - Marin
@car,你把文件转换成CSV格式了吗?可以举几个字符串作为示例吗? - Roman Pekar
不,当我想要转换它时,我会遇到错误,但我会尝试使用我的XML代码。我认为它会起作用。 - Marin
output = open('epg.xml','w') n = 0 print >> output, '<?xml version="1.0" encoding="utf-8" ?>'+'\t' print >> output, '<data>'with open('epg_slo_utf_xml.txt','r') as txt: for line in txt: if re.search('Program', line) !=None: n = n + 1 e = '<program name=SLO>'+line+'</program>' if re.search('Start', line) !=None: n = n + 1 f = ''+line+'' if re.search('Duration', line) !=None: n = n + 1 g = ''+line+'' wo = e + f + g print >> output, wo + wprint >> output , '</data>' - Marin
@RomanPekar 它会考虑空格吗?我正在使用Python 3.2。 - varsha_holla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接