IT story

추가하는 대신 Python 교체 및 덮어 쓰기

hot-time 2020. 12. 25. 09:31
반응형

추가하는 대신 Python 교체 및 덮어 쓰기


다음 코드가 있습니다.

import re
#open the xml file for reading:
file = open('path/test.xml','r+')
#convert to string:
data = file.read()
file.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data))
file.close()

파일에있는 이전 콘텐츠를 새 콘텐츠로 바꾸고 싶습니다. 그러나 내 코드를 실행하면 "test.xml"파일이 추가됩니다. 즉, 새 "대체 된"콘텐츠로 이전 콘텐츠가 채워집니다. 이전 항목을 삭제하고 새 항목 만 유지하려면 어떻게해야합니까?


seek쓰기 전에 파일의 시작 부분에 있어야 하며 file.truncate()내부 교체를 수행하려면 다음을 사용해야 합니다.

import re

myfile = "path/test.xml"

with open(myfile, "r+") as f:
    data = f.read()
    f.seek(0)
    f.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>", r"<xyz>ABC</xyz>\1<xyz>\2</xyz>", data))
    f.truncate()

다른 방법은 파일을 읽고 다음을 사용하여 다시 여는 것입니다 open(myfile, 'w').

with open(myfile, "r") as f:
    data = f.read()

with open(myfile, "w") as f:
    f.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>", r"<xyz>ABC</xyz>\1<xyz>\2</xyz>", data))

파일 inode 번호 truncateopen(..., 'w')변경 하지도 않습니다 (우분투 12.04 NFS로 한 번, ext4로 한 번 테스트).

그건 그렇고, 이것은 실제로 파이썬과 관련이 없습니다. 인터프리터는 해당하는 저수준 API를 호출합니다. 이 방법 truncate()은 C 프로그래밍 언어에서 동일하게 작동합니다. http://man7.org/linux/man-pages/man2/truncate.2.html 참조


를 사용 truncate()하면 솔루션이 될 수 있습니다.

import re
#open the xml file for reading:
with open('path/test.xml','r+') as f:
    #convert to string:
    data = f.read()
    f.seek(0)
    f.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data))
    f.truncate()

file='path/test.xml' 
with open(file, 'w') as filetowrite:
    filetowrite.write('new content')

'w'모드에서 파일을 열면 현재 텍스트를 바꾸고 파일을 새 내용으로 저장할 수 있습니다.


import os#must import this library
if os.path.exists('TwitterDB.csv'):
        os.remove('TwitterDB.csv') #this deletes the file
else:
        print("The file does not exist")#add this to prevent errors

비슷한 문제가 있었고 다른 '모드'를 사용하여 기존 파일을 덮어 쓰는 대신 파일을 다시 사용하기 전에 삭제하여 코드를 실행할 때마다 새 파일에 추가하는 것처럼 보입니다. .

참조 URL : https://stackoverflow.com/questions/11469228/python-replace-and-overwrite-instead-of-appending

반응형