如何使用python脚本更正XML文件的格式(添加头+添加队列+删除不完整的部分)

2024-05-14 02:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想处理一个非常大的XML文件>;3 GB),但问题是xml文件不完整,如下所示:

<country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <neighbor name="Austria" direction="E"/>
</country>
<country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
    <rank>68</rank>

我想要的结果是:

<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
    <rank>1</rank>
    <year>2008</year>
    <neighbor name="Austria" direction="E"/>
</country>
<country name="Singapore">
    <rank>4</rank>
    <year>2011</year>
    <neighbor name="Malaysia" direction="N"/>
</country>
</data>

因此,我必须将标题部分(如下所示)添加到XML文件中:

<?xml version="1.0"?>
<data>

然后,删除xml文件的不完整部分(如下所示):

<country name="Panama">
    <rank>68</rank>

最后,将队列部分(如下所示)添加到XML文件中:

</data>

所有这些过程都必须由Python脚本完成

谢谢你的帮助


Tags: 文件namedataxmlyearcountryrankdirection
1条回答
网友
1楼 · 发布于 2024-05-14 02:37:25

将连续的行读入缓冲区,在完成另一个<country>...</country>条目后打印并清空缓冲区

import fileinput

print('<?xml version="1.0"?>\n<data>\n')
country=[]
for line in fileinput.input():
    country.append(line)
    if '</country>' in line:
        print(''.join(country), end='')
        country=[]
print('</data>\n')

为了避免在条目之间打印虚假的换行符,我使用end=''。如果需要python2解决方案,the fix is different for Python2

就我个人而言,我会用Awk写这篇文章,这在处理此类任务时非常有效

awk 'BEGIN { print "<?xml version=\"1.0\"?>\n<data>" }
    { b = b (b ? ORS : "" ) $0 }
    /<\/country>/ { print b; b=""; }
    END { print "</data>" }' country.xml

三元表达式(b ? ORS : "")仅在b不为空时添加换行符(输出记录分隔符),即避免在第一个成员之前添加换行符

相关问题 更多 >