2013-03-09 2 views
2

: 콘텐츠 읽고 같은 텍스트 파일을 작성 내가 원하는 무엇

  • 읽기

    • 열기 텍스트 파일
    • 그것을 다시 파일
    • 에 그것을
    • 쓰기를 일부 변경합니다

    이제 수정 된 텍스트에는 수정 된 내용 만 포함하고 초기 내용은 포함하면 안됩니다.

    모드 매개 변수를 open()으로 설정하여 구현할 수 있습니까?

    예인 경우 매개 변수는 무엇이되어야합니까?
    아니요 인 경우 하나만 사용하여 구현할 수 있습니까?

    나는 다음과 같은

    replace_pattern = re.compile(r"<.+?>",re.DOTALL) 
    
    def text_process(file): 
    
        with open(file,'r') as f: 
         text = f.read() 
    
        with open(file,'w') as f: 
         f.write(replace_pattern.sub('',text)) 
    
  • 답변

    3

    당신은 '고정'버전과 파일에 텍스트를 바꾸려면 같은 문으로 2이를 구현, 당신은에 하나를 다시 열고 파일, 또는 오픈 거기에 r+ 모드 (읽기 + 쓰기) 쓰기 전에 절단 :

    with open(file,'r+') as f: 
        text = f.read() 
        f.seek(0) 
        f.truncate() 
        f.write(replace_pattern.sub('',text)) 
    

    을 파일을 절단하지 않는 경우 먼저 다음 너무 몇 가지 새로운 바이트를 작성하는 위험이 있습니다. foo bar baz을 읽고 foo spam을 작성하면 이전 데이터가 제거되지 않고 길어 지므로 파일이 foo spambaz으로 끝납니다.

    +0

    'r +'모드는'f.seek (some_position)'을 사용하여 파일에 "직접"쓰기를 허용하고'f.write (some_bytes)'하지 않습니까? – heltonbiker

    +0

    @heltonbiker : 먼저자를 이유를 추가했습니다. –

    +0

    먼저 0을 찾아야합니다. 그렇지 않으면 이전 텍스트가 끝난 위치로 글이 시작됩니다 (처음은 비어 있음). – poke