Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将.txt转换为.xml_Python_Xml_Csv_Xml Parsing_Text Files - Fatal编程技术网

如何在python中将.txt转换为.xml

如何在python中将.txt转换为.xml,python,xml,csv,xml-parsing,text-files,Python,Xml,Csv,Xml Parsing,Text Files,因此,我目前面临的问题是如何将文本文件转换为xml文件。 文本文件将采用这种格式 Serial Number: Operator ID: test Time: 00:03:47 Test Step 2 TP1: 17.25 TP2: 2.46 Serial Number: Operator ID: test Time: 00:03:47 Test Step 2 TP1: 17.25 TP2: 2.46 我想将其转换为以下格

因此,我目前面临的问题是如何将文本文件转换为xml文件。 文本文件将采用这种格式

Serial Number:      Operator ID:  test  Time:  00:03:47 Test Step 2      TP1:  17.25    TP2:  2.46
Serial Number:      Operator ID:  test  Time:  00:03:47 Test Step 2      TP1:  17.25    TP2:  2.46
我想将其转换为以下格式的xml:

<?xml version="1.0" encoding="utf-8"?>
<root>
 <filedata>
 </serialnumber>
 <operatorid>test</operatorid>
 <time>00:00:42 Test Step 2</time>
 <tp1>17.25</tp1>
 <tp2>2.46</tp2>
 </filedata>
...
</root>
我在stackoverflow中看到了类似的问题 " " 但问题是我无法将其更改为.csv格式,因为此文件是由某台机器生成的。 如果有人知道如何解决这个问题,请帮忙。
谢谢。

这里有一个更好的拆分行的方法

import xml.etree.ElementTree as ET
import fileinput
import os
import itertools as it

root = ET.Element('root')
with open('text.txt') as f:
    lines = f.read().splitlines()
celldata = ET.SubElement(root, 'filedata')
for line in it.groupby(lines):
    line=line[0]
    if not line:
        celldata = ET.SubElement(root, 'filedata')
    else:
        tag = line.split(":")
        el=ET.SubElement(celldata,tag[0].replace(" ",""))
        tag=' '.join(tag[1:]).strip()
        if 'File Name' in line:
            tag = line.split("\\")[-1].strip()
        elif 'File Size' in line:
            splist =  filter(None,line.split(" "))
            tag = splist[splist.index('Low:')+1]
            #splist[splist.index('High:')+1]
        el.text = tag
import xml.dom.minidom as minidom
formatedXML = minidom.parseString(
                          ET.tostring(
                                      root)).toprettyxml(indent=" ",encoding='utf-8').strip()

with open("test.xml","wb") as f:
    f.write(formatedXML)
请注意,
text
变量从技术上讲是您的
.txt
文件,我特意对其进行了修改,以便获得更大的输出上下文

从集合导入订单数据
从pprint导入pprint
#文本将是我们加载的.txt文件。
text=“”序列号:测试操作员ID:test1时间:00:03:47测试步骤1 TP1:17.25 TP2:2.46
序列号:操作员ID:test2时间:00:03:48测试步骤2 TP1:17.24 TP2:2.47“”
#文本文件中预期断点的标题。
标题=[“序列号:”、“操作员ID:”、“时间:”、“TP1:”、“TP2:”]
信息=[]
#将文本按行分割。
对于文本中的行。拆分(“\n”):
#将文本拆分,以便每个标题只包含信息。
默认_头=头[0]
对于标头中的标头[1:]:
行=行。替换(标题,默认标题)
info=[i.strip()用于i-in-line.split(默认_头)][1:]
#将我们的标题+信息一起编译成OrderedDict。
已编译的信息=OrderedDict()
对于页眉,zip中的信息(页眉,信息):
编译的信息[标题]=信息
#附加到我们的总体信息列表中。
信息。追加(已编译的信息)
#漂亮地打印信息(不需要,只是为了更好地显示数据。)
警察公共关系科(资料)
产出:

[OrderedDict([('Serial Number:', 'test'),
              ('Operator ID:', 'test1'),
              ('Time:', '00:03:47 Test Step 1'),
              ('TP1:', '17.25'),
              ('TP2:', '2.46')]),
 OrderedDict([('Serial Number:', ''),
              ('Operator ID:', 'test2'),
              ('Time:', '00:03:48 Test Step 2'),
              ('TP1:', '17.24'),
              ('TP2:', '2.47')])]
这种方法应该比您目前正在编写的方法更具通用性,并且代码的思想是我从另一个项目中保存下来的。我建议您仔细阅读代码并理解其逻辑

从这里,您应该能够循环查看
信息
列表,并创建自定义的
.xml
文件。我建议你也退房,因为这可能会让你在最后一步的生活更轻松

关于您的代码,请记住:分解基本任务要比将它们全部合并到一个任务中容易。通过在分割
txt
文件时尝试创建
xml
文件,您已经创建了一个怪物,当它带着bug返回时很难处理。取而代之的是,一步一个脚印地去做——创建“检查点”,让你100%确定你的工作,然后继续下一个任务

欢迎来到堆栈溢出。具体来说,“我在分线时面临问题”是什么意思?代码的哪一部分?什么“问题”?请阅读。