본문 바로가기
프로그래밍/Python

[Python] 텍스트 파일 내용 수정하기

by 부자 꽁냥이 2021. 4. 24.

안녕하세요~ 꽁냥이에요. 얼마 전 텍스트를 읽고 특정 상황에서 수정해야 할 필요가 있었어요. 꽁냥이는 텍스트를 읽고 쓰는 것만 해봤지 기존 텍스트 파일을 읽고 수정해본 적이 없어서 매우 당황을 했어요. 어찌어찌 시간이 지나서 해결하긴 했지만요. 꽁냥이는 이러한 내용을 잊어버리지 않기 위해 포스팅하려고 해요.

 

여기서 다루는 내용은 다음과 같습니다. 

 

1. 라인별로 내용 바꾸기

2. 단어 바꾸기


   1. 라인별로 내용 바꾸기

여기서는 라인별로 내용을 바꿔보는 방법에 대해서 알아보겠습니다.

 

 

꽁냥이는 1 번째 줄과 5 번째 내용을 바꿀 거예요. 다음과 같이 말이죠.


반갑습니다.

 

꽁냥이에요.

 

블로그 많이 사랑해주세요.


 

아래는 꽁냥이의 꿈을 실현해줄 코드입니다(여기서는 파일을 읽고 쓰는 방법은 기본적으로 안다고 가정합니다). 

 

text_file_path = './sample_01.txt'
new_text_content = ''
with open(text_file_path,'r') as f:
    lines = f.readlines()
    for i, l in enumerate(lines):
        if i == 0:
            new_string = '반갑습니다.'
        elif i == 4:
            new_string = '블로그 많이 사랑해주세요.'
        else:
            new_string = l.strip()
        
        if new_string:
            new_text_content += new_string + '\n'
        else:
            new_text_content += '\n'
                
with open(text_file_path,'w') as f:
    f.write(new_text_content)

 

line 3

텍스트 파일을 읽어줍니다. 하다 보면 아래와 같은 오류가 생길 수 있는데요.

 

 

이 경우에는 아래와 같이 open의 encoding인자에 'utf-8'을 추가해주세요.

 

with open(text_file_path,'r',encoding='utf-8') as f:

 

그리고 아래와 같은 오류가 나올 수도 있습니다. 

 

 

이 경우에는 encoding 인자를 다시 삭제해주세요.

 

line 2

새롭게 바꿀 내용을 초기화시켜줍니다.

 

line 6~11

1, 5 번째 줄만 새롭게 바꿔줄 내용으로 정해줍니다. 특히 readlines는 기본적으로 오른쪽 끝에 새로운 라인을 뜻하는 '\n'을 포함하고 있으므로 기존 라인을 가져올 때에는 strip함수를 이용하여 공백을 제거해주었습니다. 

 

line 13~16

만약 new_string에 문자열이 있다면 그 문자열 오른쪽 끝에 '\n'을 추가하고 그렇지 않은 경우는 기존에 공백으로 이루어진 라인이라는 뜻이므로 '\n'만 추가해줍니다.

 

line 18~19

새롭게 추가된 내용으로 기존 텍스트 파일을 덮어씁니다.

 

위 코드를 실행해보세요.

 

 

꽁냥이의 바람대로 잘 바뀌었어요. 짝짝~!! 텍스트 파일에서 라인별로 바꾸는 과정을 요약하자면 다음과 같습니다.

 

새롭게 바뀔 내용 초기화 -> 해당 라인별로 새롭게 바꿀 라인 추가 -> 해당 파일에 덮어씀

 

이 과정만 숙지하시면 라인별로 바꾸는데 큰 무리가 없을 거예요.

반응형

   2. 단어 바꾸기

이번에는 전체 문서에 대하여 특정 단어만 바꿔 보도록 하겠습니다. 먼저 아래와 같은 텍스트가 있다고 해볼게요. 

 

 

 

꽁냥이는 '감사'를 '사랑'으로 바꿔보겠습니다. 다음은 이를 위한 코드입니다. 원리는 앞서 살펴본 것과 동일합니다.

 

text_file_path = './sample_02.txt'
new_text_content = ''
target_word = '감사'
new_word = '사랑'
with open(text_file_path,'r') as f:
    lines = f.readlines() ## 기존 텍스트파일에 대한 내용을 모두 읽는다.
    for i, l in enumerate(lines):
        new_string = l.strip().replace(target_word,new_word)
        if new_string:
            new_text_content += new_string + '\n'
        else:
            new_text_content += '\n'
                
with open(text_file_path,'w') as f:
    f.write(new_text_content)

 

line 2~4

새롭게 바꿔 줄 내용을 초기화하고 바꿀 단어, 바뀌는 단어를 각각 정해줍니다.

 

위 코드를 실행해보세요.

 

 

의도한 대로 잘 바뀐 것을 알 수 있습니다.


이번 포스팅에서는 텍스트 파일에서 라인별로 내용을 수정하는 방법에 대해서 알아보았습니다. 다들 알고 계실 테지만 그래도 조금이라도 도움이 되셨으면 합니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다. 안녕히 계세요~~

 


참고자료

www.kite.com/python/answers/how-to-replace-a-string-within-a-file-in-python


 

댓글


맨 위로