代码之家  ›  专栏  ›  技术社区  ›  Atinesh

如何使用Python编辑XML文件?

  •  -1
  • Atinesh  · 技术社区  · 6 年前

    我有一份清单 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>
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Sgiath    6 年前

    !DOCTYPE 线路?是第一次吗 !DOCTYPE 线路?等

    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. 您真的需要/想要使用Python来实现这一点吗?有更好的解决办法。例如,如果您在Linux或Mac上,您可以使用 sed :

      for f in *.xml; do sed -i '' -n '/<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">/!p' $f; done
      
        2
  •  0
  •   Novak    6 年前

    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、 关闭()