如何使用Python编辑XML文件?

2024-10-04 03:28:57 发布

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

我有一个XML文档列表,其结构如下。我需要删除这行:

<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">

使用Python代码,因为手动删除它会非常耗时,因为有很多文件。你知道吗

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">

<pdf2xml producer="poppler" version="0.62.0">
<page number="1" position="absolute" top="0" left="0" height="1262" width="892">

</page>
</pdf2xml>

Tags: 文件代码文档列表versionpagexml手动
2条回答

您可以逐行读取文件,然后将它们写回,而不需要文件中不需要的行。只要确定你要删除的内容-是不是就是你写的那一行?总是第二条线吗?是每一行吗?是第一行吗?等等

import os
import sys

# Assumes first argument when running the script is a directory containing XML files
directory = sys.argv[1] if len(sys.argv) > 1 else "."
files = os.listdir(directory)

for f in files:
    # Ignore not XML files
    if not f.endswith(".xml"):
        continue

    # Read file content
    with open(f, 'r') as f_in:
        content = f_in.readlines()

    # Rewrite the original file
    with open(f, 'w') as f_out:
        for line in content:
            # The condition may differ based on what you really want to delete
            if line != "<!DOCTYPE pdf2xml SYSTEM \"pdf2xml.dtd\">\n":
                f_out.write(line)

需要考虑的事项:

  1. 如果文件很大,您可能不想将其加载到内存中
  2. 例如,如果您总是只想删除文件中的第二行,则效率很低。你知道吗
  3. 你真的需要/想要用Python吗?有更好的解决办法。例如,如果您使用的是Linux或Mac,则可以使用sed

    for f in *.xml; do sed -i '' -n '/<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">/!p' $f; done
    

首先,打开文件:

f = open("yourfile.txt","r")

接下来,从文件中获取所有行:

lines = f.readlines()

现在可以关闭文件:

f.close()

并以写入模式重新打开:

f = open("yourfile.txt","w")

然后,写回你的行,除了你想删除的行。您可能需要将“\n”更改为文件结尾使用的任何行。你知道吗

for line in lines:
  if not line.startswith('<!DOCTYPE'):
    f.write(line)

最后,再次关闭文件。你知道吗

f.close()

相关问题 更多 >