[PYTHON] 파이썬에서 XML 파일을 업데이트 / 수정하는 방법은 무엇입니까?
PYTHON파이썬에서 XML 파일을 업데이트 / 수정하는 방법은 무엇입니까?
이미 데이터가 포함 된 후 업데이트하려는 XML 문서가 있습니다.
XML 파일을 "a"(추가) 모드로 여는 것에 대해 생각했습니다. 문제는 새 데이터가 루트 닫기 태그 뒤에 기록된다는 것입니다.
파일의 마지막 줄을 삭제 한 다음 그 지점에서 데이터 쓰기를 시작한 다음 루트 태그를 닫으려면 어떻게합니까?
물론 전체 파일을 읽고 문자열 조작을 할 수는 있지만 그 생각이 최선이라고 생각하지 않습니다.
시간 내 줘서 고마워.
해결법
-
==============================
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.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 b>는 some body b>로 출력됩니다. 주문 매개 변수가 정의 됨) 이는 원래 파일을 변경하고 파일을 개정 제어 시스템 (예 : SVN, CSV, ClearCase 등)으로 커밋 할 때 두 파일 간의 차이가보기 싫어 질 수 있음을 의미합니다.
-
==============================
3.유용한 Python XML 파서 :
유용한 Python XML 파서 :
그 중 어떤 것도 XML 파일을 텍스트 문자열로 업데이트하는 것보다 낫습니다.
그게 너에게 어떤 의미인지 :
원하는 XML 파서를 사용하여 파일을 열고 관심있는 노드를 찾은 다음 값을 바꾸고 파일을 직렬화하십시오.
-
==============================
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.XML 파서를 사용하고 제공된 API를 사용하여 새 요소를 추가하는 것이 정말로 원하는 작업입니다.
XML 파서를 사용하고 제공된 API를 사용하여 새 요소를 추가하는 것이 정말로 원하는 작업입니다.
그런 다음 파일을 덮어 씁니다.
사용하기 가장 쉬운 방법은 아마도 아래와 같은 DOM 파서 일 것이다.
http://docs.python.org/library/xml.dom.minidom.html
-
==============================
6.이 프로세스를보다 강력하게 만들려면 SAX 파서 (메모리에서 전체 파일을 보유 할 필요가없는 방식)를 사용하고 트리 끝까지 읽고 쓰고 추가를 시작하는 것이 좋습니다.
이 프로세스를보다 강력하게 만들려면 SAX 파서 (메모리에서 전체 파일을 보유 할 필요가없는 방식)를 사용하고 트리 끝까지 읽고 쓰고 추가를 시작하는 것이 좋습니다.
-
==============================
7.특정 XML 모듈을 사용하여 XML 파일을 읽어야합니다. 그렇게하면 메모리에있는 XML 문서를 편집하고 변경된 XML 문서를 파일에 다시 쓸 수 있습니다.
특정 XML 모듈을 사용하여 XML 파일을 읽어야합니다. 그렇게하면 메모리에있는 XML 문서를 편집하고 변경된 XML 문서를 파일에 다시 쓸 수 있습니다.
다음은 빠른 시작입니다. http://docs.python.org/library/xml.dom.minidom.html
다른 XML 유틸리티가 많이 있는데, XML 파일의 성격과 편집 방법에 따라 다릅니다.
-
==============================
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.
from https://stackoverflow.com/questions/1591579/how-to-update-modify-an-xml-file-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 목록에 콜론과 쉼표는 무엇입니까? (0) | 2018.11.21 |
---|---|
[PYTHON] 수십 개의 배열에 대한 가장 빠른 저장 및로드 옵션 (0) | 2018.11.21 |
[PYTHON] 파이썬은 올바른 시간대에 현재 시간을 얻습니다. [duplicate] (0) | 2018.11.21 |
[PYTHON] 알파벳으로 문자 위치 가져 오기 (0) | 2018.11.21 |
[PYTHON] 팬더가 인식하는 모든 유형은 무엇입니까? (0) | 2018.11.21 |