2013-10-21 2 views
3
def replace(file_path, pattern, subst): 
    file_path = os.path.abspath(file_path) 
    #Create temp file 
    fh, abs_path = mkstemp() 
    new_file = open(abs_path,'w') 
    old_file = open(file_path) 
    for line in old_file: 
     new_file.write(line.replace(pattern, subst)) 
    #close temp file 
    new_file.close() 
    close(fh) 
    old_file.close() 
    #Remove original file 
    remove(file_path) 
    #Move new file 
    move(abs_path, file_path) 

파일의 문자열을 바꾸는 기능이 있습니다. 그러나 패턴이 발견 된 전체 라인을 대체하는 좋은 방법을 알 수는 없습니다.파이썬 패턴 찾기 및 전체 라인 바꾸기

예를 들어, "John은"하루 종일 열심히 일한 "패턴"John "을 사용하여"Mike did not work hard "라는 줄 바꿈을 대체하려고합니다.

내 현재 함수를 사용하면 전체 선을 바꾸기 위해 전체 선을 패턴으로 작성해야합니다. 이 속으로

for line in old_file: 
    new_file.write(line.replace(pattern, subst)) 

:

+0

당신이 그것을 수행하는 방법을 묻는 이 코드를 변경하지 않고? 당신이이 코드를 바꿀 수 있다면, 나는 대답을 이해할 수있을 것입니다. – kojiro

답변

7

첫째, 당신은이 부분 변경 될 수 있습니다

for line in old_file: 
    if pattern in line: 
     new_file.write(subst) 
    else: 
     new_file.write(line) 

을 또는 당신은 심지어 예쁘게 만들 수 :

for line in old_file: 
    new_file.write(subst if pattern in line else line)