拆分一个大型XML文件,其中包含多个串联在一起的XML文档

时间:2019-04-30 16:06:01

标签: python xml

我的xml文件包含有关多项专利的信息:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
<us-patent-grant>
.
.
.
</us-patent-grant>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
<us-patent-grant>
.
.
.
</us-patent-grant>

我想为每个专利创建一个单独的xml文件。问题是该文件不是有效的XML文档。我尝试执行以下操作:

import xml.etree.ElementTree as x
path = r"C:\Users\XX\Downloads\ipg190423\ipg190423.xml"
d = []
s = ""
f = open(path)
for l in f:
    if l == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n":
        if len(s)>0:
            d.append(s)
        s = ""
    s += l
d.append(s)

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

好吧,您可以使用正则表达式来标识

?xml version =“ 1.0” encoding =“ UTF-8”?

行。找到它后,您将以下各行读入另一个字符串/文件中,直到下一次出现或文件结尾为止。 或者,如果您不介意以字符串形式读取整个文件,则可以使用通常的str.split('...')

with open('workfile') as f:
    data = f.read()
texts = data.split('?xml version="1.0" encoding="UTF-8"?')

并逐行

texts = list()
with open('workfile') as f:
    text.append(f.readline())
    if f.readline.find('?xml version="1.0" encoding="UTF-8"?') > 0:
       list.append(text);
       text = ''

然后您将获得一个文本列表,可以将其写入单个文件。

该代码未经测试,因此您可能需要对其进行修复