2014-01-22 2 views
0

파일에서 몇 줄의 텍스트를 찾는 스크립트를 작성하고 있습니다. 정확히 주어진 텍스트를 다른 것으로 대체하는 방법을 궁금합니다 (새 문자열은 더 짧거나 길 수도 있습니다). 예, 다음을 수행하는 방법 경우 (파이썬 - 파일에서 여러 줄 문자열 바꾸기

for match in pattern.finditer(text_in_file) 
    #if it would be possible I wish to change 
    #text in a file here by (probably) replacing match.group(0) 

가 이런 식으로에 달성 할 수 있는가 : 나는 다음과 같이 할 파일의 모든 경기를 찾고 다음 여러 라인 패턴을 만들 수 re.compile()을 사용하고 있습니다 가장 쉬운 방법입니까?) 또는 내 접근 방식이 잘못되었거나 어렵습니다. 그렇다면 올바른 방법은 무엇입니까?

+1

사용하여 인쇄 할 수 있습니다. –

답변

1

간단한 솔루션 :

  1. 문자열로 변수에 전체 텍스트를 읽어 보시기 바랍니다.
  2. 를 사용하여 여러 줄의 정규 표현식은
  3. 사용을 대체 할 일치하는 output = pattern.sub('replacement', fileContent)

복잡한 솔루션 :

  1. 가 선으로
  2. 를 인쇄하여 라인을 파일 라인을 읽고있는 이 패턴의 시작과 일치하지 않습니다.
  3. 시작과 일치하는 것이 발견되면 끝 패턴이 나타날 때까지 인쇄를 중지하십시오. 당신이 마지막 패턴을 봤다면
  4. , 대체에게`이 아닌`re.finditer` re.sub`
+2

코드 예제는이 대답을 크게 향상시킵니다. – rjurney

+1

아마도 코드 예제는 명확성을 줄 수 있습니다. –

1

pattern.sub('replacement text', text_in_file)을 사용하여 일치하는 항목을 대체하십시오.

필요에 따라 대체 패턴에서 역 참조를 사용할 수 있습니다. 문자열이 더 짧거나 길면 상관 없습니다. 이 메서드는 대체 문자가있는 문자열 값을 반환합니다. 텍스트가 파일에서 왔을 경우, 내용을 대체하기 위해 텍스트를 해당 파일에 다시 써야합니다.

대신 자리를 대신 사용해야하는 경우 fileinput module을 사용할 수 있습니다. 모듈은 원본 파일을 옆으로 옮기고 그 자리에 새 파일을 작성합니다.

관련 문제