본문 바로가기
Python

파이썬 특정 값, 문자 변경 방법 및 코드 공유 (Python)

by 무적물리 2020. 5. 1.

저는 주로 시뮬레이션에서 특정 값이나 문자열을 찾아서 변경하는 코드를 사용하곤 합니다. 다른분들도 필요에 따라 특정 값이나 문자를 찾아서 변경해야하는 일이 발생합니다. 이러한 방법은 txt 확장자 이외에도 스크립트 형식의 파일은 대부분 적용 가능합니다. 확장자를 지원하지 않는다면 확장자를 변경해서 진행해도 됩니다. 


이번 포스팅에서는 특정 값, 문자, 단어, 문자열을 찾아서 원하는 값으로 대체시키는 코드를 작성하겠습니다. 처음에는 코드 하나씩 설명하고 마지막에서 전체 코드를 합치는 형태로 글을 작성하겠습니다. 참고해주세요.




예시 문제

이번 포스팅에서 사용할 예시는 특정 위치의 텍스트 파일안의 'a = 1', 'b = 2' 문자열을 찾아 'a = 2', 'b = 3'로 대체해 주는 것입니다. 사진으로 보시면 굉장히 간단합니다. 왼쪽이 변경전, 오른쪽이 변경후 입니다. 아래 코드를 통해서 잘 바뀐 것을 확인할 수 있습니다.



파일 위치 선언 및 변수화

아래 코드와 같이 파이썬 기본 함수를 사용해서 파일의 위치를 선언해 줍니다. 이후에 Read 변수에 파일에서 읽어온 내용을 변수화해줍니다. print 해보시면 아시겠지만 파일의 내용이 그대로 들어가 있습니다. 파일을 변수화했으니, 파일을 close 매서드로 닫아주도록 합니다.


# File Open

f = open("C:/Users/s410/Desktop/test.txt", 'r', encoding='UTF8')

Read = f.read()

f.close()


찾을 값, 바꿀 값 변수 선언

'Iteration_find'은 찾을 값, 'Iteration_Replace'은 대체할 값으로 리스트 형태로 변수 선언해줍니다. 이를 for문을 사용해서 파일 내 문자열을 변경해주기 위해선 튜플 형태의 변수로 선언해줘야합니다. len함수를 사용해서 찾을 값의 개수를 자동으로 계산하도록 했습니다.


# Variables

Iteration_find = ['a = 1', 'b = 2']

Iteration_Replace = ['a = 2', 'b = 3']

Iteration_Merge = [(Iteration_find[n], Iteration_Replace[n]) for n in range(0, len(Iteration_find))]


위와 같이 찾을 값은 'a = 1', 'b = 2' 이며, 대체할 값은 각각 'a = 2', 'b = 3' 입니다. Iteration_Merge 변수에서 ('a = 1', 'a = 2')와 같은 형태로 변수가 선언됩니다.



값 or 문자 변경

파일에서 문자를 변경하기 위해서는 for문을 사용해서 Iteration 시켜주면서 값을 찾고 변경해줘야 합니다. 첫번째 바퀴에는 a에 해당하는 값이, 두번째 바퀴에는 b에 해당하는 값이 변경됩니다. 


# Replace

for (i, j) in Iteration_Merge:

    Read = Read.replace('{}'.format(i), '{}'.format(j))


변경 텍스트 저장

바꾸어졌으니 저장을 해줘야 합니다. 저장하는 방법은 파일을 불러들인 함수에서 'r'만 'w'로 변경해주면 됩니다. 인코딩을 해줘야 오류 없이 저장이 잘되니 꼭 입력해줘야 합니다. 물론, 인코딩을 안해도 잘 저장되는 경우가 있습니다.


# Save

f = open("C:/Users/s410/Desktop/test_replace.txt", 'w', encoding='UTF8')

f.write(Read)

f.close()


전체 코드

# File Open

f = open("C:/Users/s410/Desktop/test.txt", 'r', encoding='UTF8')

Read = f.read()

f.close()


# Variables

Iteration_find = ['a = 1', 'b = 2']

Iteration_Replace = ['a = 2', 'b = 3']

Iteration_Merge = [(Iteration_find[n], Iteration_Replace[n]) for n in range(0, len(Iteration_find))]


# Replace

for (i, j) in Iteration_Merge:

    Read = Read.replace('{}'.format(i), '{}'.format(j))


# Save

f = open("C:/Users/s410/Desktop/test_replace.txt", 'w', encoding='UTF8')

f.write(Read)

f.close()


마무리

이번 포스팅에서는 파이썬에서 특정 값, 문자, 문자열을 찾아서 다른 값으로 대체하는 방법에 대해 알아보았습니다. 제 블로그에는 이런 내용의 실무에 유용한 파이썬 코드가 많이니 참고하시면 좋겠습니다.


댓글