복붙노트

[PYTHON] 파이썬에서 XML 파일을 업데이트 / 수정하는 방법은 무엇입니까?

PYTHON

파이썬에서 XML 파일을 업데이트 / 수정하는 방법은 무엇입니까?

이미 데이터가 포함 된 후 업데이트하려는 XML 문서가 있습니다.

XML 파일을 "a"(추가) 모드로 여는 것에 대해 생각했습니다. 문제는 새 데이터가 루트 닫기 태그 뒤에 기록된다는 것입니다.

파일의 마지막 줄을 삭제 한 다음 그 지점에서 데이터 쓰기를 시작한 다음 루트 태그를 닫으려면 어떻게합니까?

물론 전체 파일을 읽고 문자열 조작을 할 수는 있지만 그 생각이 최선이라고 생각하지 않습니다.

시간 내 줘서 고마워.

해결법

  1. ==============================

    1.분명히하지 말아야 할 빠르고 쉬운 방법은 readlines ()를 사용하여 전체 파일을 문자열 목록으로 읽는 것입니다. 나는 빠르고 쉬운 해결책이 당신이 찾고있는 것이기 때문에 이것을 적는다.

    분명히하지 말아야 할 빠르고 쉬운 방법은 readlines ()를 사용하여 전체 파일을 문자열 목록으로 읽는 것입니다. 나는 빠르고 쉬운 해결책이 당신이 찾고있는 것이기 때문에 이것을 적는다.

    open ()을 사용하여 파일을 연 다음 readlines () 메서드를 호출하십시오. 파일에있는 모든 문자열 목록이 나타납니다. 이제 마지막 요소 앞에 문자열을 쉽게 추가 할 수 있습니다 (마지막 요소 앞에 하나의 요소 만 추가하면됩니다). 마지막으로 writelines ()를 사용하여 파일에 다시 쓸 수 있습니다.

    예를 들어 도움이 될 수 있습니다 :

    my_file = open(filename, "r")
    lines_of_file = my_file.readlines()
    lines_of_file.insert(-1, "This line is added one before the last line")
    my_file.writelines(lines_of_file)
    

    당신이 이것을하지 말아야하는 이유는 당신이 아주 빠르게 뭔가를하지 않으면 XML 파싱을 사용해야하기 때문입니다. 이 라이브러리는 DOM, 트리 및 노드와 같은 개념을 사용하여 XML로 지능적으로 작업 할 수있게 해주는 라이브러리입니다. 이것은 XML을 사용하는 적절한 방법 일뿐만 아니라 표준 방식이기도하여 코드를 더 이식성있게 만들고 다른 프로그래머가 쉽게 이해할 수 있도록합니다.

    팀의 대답은이 목적을 위해 http://docs.python.org/library/xml.dom.minidom.html을 확인하는 것에 대해 언급했는데 이것이 좋은 아이디어라고 생각합니다.

  2. ==============================

    2.ElementTree 사용 :

    ElementTree 사용 :

    import xml.etree.ElementTree
    
    # Open original file
    et = xml.etree.ElementTree.parse('file.xml')
    
    # Append new tag: <a x='1' y='abc'>body text</a>
    new_tag = xml.etree.ElementTree.SubElement(et.getroot(), 'a')
    new_tag.text = 'body text'
    new_tag.attrib['x'] = '1' # must be str; cannot be an int
    new_tag.attrib['y'] = 'abc'
    
    # Write back to file
    #et.write('file.xml')
    et.write('file_new.xml')
    

    참고 : 실험을 위해 file_new.xml에 작성된 출력은 file.xml에 다시 기록하면 이전 내용을 대체합니다.

    중요 : ElementTree 라이브러리는 dict에 속성을 저장하므로 이러한 속성이 xml 텍스트에 나열되는 순서는 유지되지 않습니다. 대신 알파벳순으로 출력됩니다. (또한 주석이 제거됩니다.

    즉, xml 입력 텍스트 some body some body 로 출력됩니다. 주문 매개 변수가 정의 됨)

    이는 원래 파일을 변경하고 파일을 개정 제어 시스템 (예 : SVN, CSV, ClearCase 등)으로 커밋 할 때 두 파일 간의 차이가보기 싫어 질 수 있음을 의미합니다.

  3. ==============================

    3.유용한 Python XML 파서 :

    유용한 Python XML 파서 :

    그 중 어떤 것도 XML 파일을 텍스트 문자열로 업데이트하는 것보다 낫습니다.

    그게 너에게 어떤 의미인지 :

    원하는 XML 파서를 사용하여 파일을 열고 관심있는 노드를 찾은 다음 값을 바꾸고 파일을 직렬화하십시오.

  4. ==============================

    4.Tim과 Oben Sonne이 XML 라이브러리를 사용해야한다는 것에 동의하지만, 여전히 간단한 문자열 개체로 조작 할 수있는 방법이 있습니다.

    Tim과 Oben Sonne이 XML 라이브러리를 사용해야한다는 것에 동의하지만, 여전히 간단한 문자열 개체로 조작 할 수있는 방법이 있습니다.

    난 당신이 설명하는 것에 대해 하나의 파일 포인터를 사용하려고 시도하지 않았으며 대신에 파일을 메모리로 읽어서 편집 한 다음 쓰십시오.

    inFile = open('file.xml', 'r')
    data = inFile.readlines()
    inFile.close()
    # some manipulation on `data`
    outFile = open('file.xml', 'w')
    outFile.writelines(data)
    outFile.close()
    
  5. ==============================

    5.XML 파서를 사용하고 제공된 API를 사용하여 새 요소를 추가하는 것이 정말로 원하는 작업입니다.

    XML 파서를 사용하고 제공된 API를 사용하여 새 요소를 추가하는 것이 정말로 원하는 작업입니다.

    그런 다음 파일을 덮어 씁니다.

    사용하기 가장 쉬운 방법은 아마도 아래와 같은 DOM 파서 일 것이다.

    http://docs.python.org/library/xml.dom.minidom.html

  6. ==============================

    6.이 프로세스를보다 강력하게 만들려면 SAX 파서 (메모리에서 전체 파일을 보유 할 필요가없는 방식)를 사용하고 트리 끝까지 읽고 쓰고 추가를 시작하는 것이 좋습니다.

    이 프로세스를보다 강력하게 만들려면 SAX 파서 (메모리에서 전체 파일을 보유 할 필요가없는 방식)를 사용하고 트리 끝까지 읽고 쓰고 추가를 시작하는 것이 좋습니다.

  7. ==============================

    7.특정 XML 모듈을 사용하여 XML 파일을 읽어야합니다. 그렇게하면 메모리에있는 XML 문서를 편집하고 변경된 XML 문서를 파일에 다시 쓸 수 있습니다.

    특정 XML 모듈을 사용하여 XML 파일을 읽어야합니다. 그렇게하면 메모리에있는 XML 문서를 편집하고 변경된 XML 문서를 파일에 다시 쓸 수 있습니다.

    다음은 빠른 시작입니다. http://docs.python.org/library/xml.dom.minidom.html

    다른 XML 유틸리티가 많이 있는데, XML 파일의 성격과 편집 방법에 따라 다릅니다.

  8. ==============================

    8.Edan Maor가 설명했듯이, Edam Maor가 설명했던 resons를 위해해서는 안되는 (utc-16으로 인코딩 된 .xml 파일의) 빠르고 지저분한 방법은 시간 제한에서 다음 Python 2.7 코드를 사용하여 수행 할 수 있습니다 XML 구문 분석 (프로퍼레이터)을 배우는 것을 허용하지 않습니다.

    Edan Maor가 설명했듯이, Edam Maor가 설명했던 resons를 위해해서는 안되는 (utc-16으로 인코딩 된 .xml 파일의) 빠르고 지저분한 방법은 시간 제한에서 다음 Python 2.7 코드를 사용하여 수행 할 수 있습니다 XML 구문 분석 (프로퍼레이터)을 배우는 것을 허용하지 않습니다.

    다음과 같이하고 싶다고 가정합니다.

    파이썬 2.7에서, "a"가 파이썬의 "작업 폴더"에 있던 폴더 "a"에있는 "b.xml"이라는 이름의 .xml 파일을 수정했습니다. 그것은 새로운 수정 된 파일을 폴더 "a"에서 "c.xml"로 출력하고, 파이썬 2.7 이후의 추가 사용에는 인코딩 오류를 내지 않습니다.

    pattern = '<Author>'
    subst = '    <Author>' + domain + '\\' + user_name + '</Author>'
    line_index =0 #set line count to 0 before starting
    file = io.open('a/b.xml', 'r', encoding='utf-16')
    lines = file.readlines()
    outFile = open('a/c.xml', 'w')
    for line in lines[0:len(lines)]:
        line_index =line_index +1
        if line_index == len(lines):
            #1. & 2. delete last line and adding another line in its place not writing it
            outFile.writelines("Write extra line here" + '\n')
            # 4. Close root tag:
            outFile.writelines("</phonebook>") # as in:
            #http://tizag.com/xmlTutorial/xmldocument.php
        else:
            #3. Substitue a line if it finds the following substring in a line:
            pattern = '<Author>'
            subst = '    <Author>' + domain + '\\' + user_name + '</Author>'
            if pattern in line:
                line = subst
                print line
            outFile.writelines(line)#just writing/copying all the lines from the original xml except for the last.
    
  9. from https://stackoverflow.com/questions/1591579/how-to-update-modify-an-xml-file-in-python by cc-by-sa and MIT license