使用python将格式怪异的XML文件转换为CSV



我有一个奇怪的XML文档,其中包含电话号码的详细信息,我需要将其导出到CSV文档中,但问题是它的格式不正确。所有元素都在</字符串>标签和一些";名称";字段是重复的,但方式并不完全相同(就像下面的例子一样,大多数重复的行都包含额外的空格或逗号(。所有的";数字";从";名称";字段。

<string>example1</string>
<string>014584111</string>
<string>example2</string>
<string>04561212123</string>
<string>example3</string>
<string>+1 156151561</string>
<string>example4</string>
<string>564513212</string>

<string>example3, </string>
<string>example4  </string>

如何使用python将其转换为CSV格式而不重复内容?这里有一个输出的例子

FullName  PhoneNumber

example1  014584111
example2  014584111    
example3  +1 156151561  
example4  564513212 

当然,这是可以做到的。如果你能用人类语言描述这个过程,你也可以对它进行编程

示例:

  • 读取文件(逐行?或者文件是否适合内存?(
  • 剥离<string></string>
    • 这条线是预定的吗-->否-->这是一把钥匙
    • 这条线路是预定的吗-->是->它是最后一个键的值
  • 将结果添加到dict
  • 将dict写入.csv文件

所以-你现在需要做出一些决定,比如:

导入文件很大吗?然后它可能无法放入内存,我们需要逐行处理。或者它会被人们记住吗?

这个程序需要很多次吗?还是只是一次性转换?

然后你可以把问题分成更小的子问题,并为每个子问题写一些测试。

您还需要考虑更多的情况,如文件大小,是否是一次性脚本,是否应该进行错误检查(如果有两行?(等等。

下面(使用data执行需要执行的操作(

import xml.etree.ElementTree as ET
def is_phone_number(value):
for x in value:
if x != '+' and x != ' ' and not x.isnumeric():
return False
return True

xml = '''<r> <string>example1</string>
<string>014584111</string>
<string>example2</string>
<string>04561212123</string>
<string>example3</string>
<string>+1 156151561</string>
<string>example4</string>
<string>564513212</string>

<string>example3, </string>
<string>example4  </string></r>'''
data = []
root = ET.fromstring(xml)
strings = root.findall('.//string')
i = 0
while i < len(strings):
if is_phone_number(strings[i+1].text):
data.append({'key': strings[i].text,'value':strings[i+1].text})
i += 2
print(data)

输出

[{'key': 'example1', 'value': '014584111'}, {'key': 'example2', 'value': '04561212123'}, {'key': 'example3', 'value': '+1 156151561'}, {'key': 'example4', 'value': '564513212'}]

相关内容

  • 没有找到相关文章

最新更新