Advertisement
  1. Code
  2. Python

파이썬으로 여러 파일을 변경하는 법

Scroll to top
Read Time: 2 min

Korean (한국어) translation by Dae-yeop Lee (you can also view the original English article)

어떤 사람이 영국 철자에 익숙하고 미국에서 학위를 받기로 했다고 가정해 봅시다. 그는 수업을 위해 파이썬에 관한 논문을 써야 합니다. 그는 파이썬에 능통하며 논문을 쓰는 데는 문제가 없습니다. 그는 논문에서 이미지에 대해 이야기하고 neighborhood(미국 철자법) 대신 neighbourhood(영국 철자법)을 비롯해 gray(미국 철자법) 대신 grey(영국 철자법)이라는 단어를 두 번 이상 썼습니다. 하지만 그는 현재 미국에 있으므로 영국 철자로 적힌 단어를 모두 미국 철자로 대체해야 합니다.

이것은 여러 곳에서 일부 맞춤법이나 오탈자를 변경해야 하는 여러 시나리오 중 하나입니다.

이번 팁에서는 5개의 텍스트 파일에 이름의 철자가 잘못 적혀 있는 예제를 보여 드리겠습니다. 즉, Abder 대신 Adber가 적혀있는 것입니다. 예제에서는 파이썬을 이용해 디렉터리에 들어있는 모든 텍스트 파일에서 제 이름의 철자를 수정하는 방법을 보여드리겠습니다.

그럼 시작해 봅시다!

데이터 준비

예제를 진행하기 전에 작업할 데이터(텍스트 파일)를 준비해 봅시다. 먼저 예제에 사용할 파일이 포함된 디렉터리를 내려받습니다. 파일의 압축을 풀면 준비가 모두 끝납니다.

보다시피 Abder라는 디렉터리에는 1, 2, 3, 4, 5라는 다섯 개의 파일이 들어 있습니다.

구현

그럼 재미있는 부분을 시작해 봅시다. 맨 먼저 할 일은 Abder 디렉터리의 내용을 읽는 것입니다. 이를 위해 listdir() 메서드를 다음과 같이 사용할 수 있습니다.

1
import os
2
directory = os.listdir('/Users/DrAbder/Desktop/Abder')

디렉터리 안에 무엇이 있는지 알아내려고 한다면 다음과 같이 하면 됩니다.

1
print directory

이 경우 다음과 같은 결과가 출력됩니다.

1
['.DS_Store', '1.rtf', '2.rtf', '3.rtf', '4.rtf', '5.rtf']

보다시피 디렉터리 안에 5개의 rtf 파일이 들어있습니다.

현재 디렉터리(관심 디렉토리)로 작업하려면 다음과 같이 chdir을 사용하면 됩니다.

1
os.chdir('/Users/DrAbder/Desktop/Abder')

그다음으로 할 일은 Abder 디렉터리에 있는 모든 파일을 순회하는 것입니다. 다음과 같이 for-loop를 사용하면 됩니다.

1
for file in directory:

디렉터리 안의 5개 파일 각각에 대해 Adber를 찾고 싶으므로 이 단계에서는 각 파일의 내용을 열고 읽어야 합니다.

1
open_file = open(file,'r')
2
read_file = open_file.read()

이제 중요한 단계에 이르렀는데, 이 경우 Adber를 찾는 패턴 매칭이 특히 중요합니다. 이 단계에서는 정규 표현식을 사용합니다. 파이썬에서 정규 표현식을 사용하기 위해 re 모듈을 사용하겠습니다.

여기서는 이 모듈의 두 가지 주요 함수를 사용할 것입니다. 첫 번째 함수는 compile()입니다.

정규 표현식 패턴을 정규 표현식 객체로 컴파일하는데, 이 객체는 match()search() 메서드를 이용해 매칭시키는 데 사용할 수 있습니다.

그리고 두 번째 함수는 잘못된 철자를 올바른 것으로 대체하기 위한 sub()입니다. 따라서 여기서는 다음과 같은 작업을 수행할 것입니다.

1
regex = re.compile('Adber')
2
read_file = regex.sub('Abder', read_file)

마지막으로 다음과 같이 파일을 대체한 후 새 텍스트를 씁니다.

1
write_file = open(file,'w')
2
write_file.write(read_file)

모두 한데 모으기

이번 절에서는 각 파일에서 Adber를 찾아서 Abder로 대체하는 전체 파이썬 스크립트를 보겠습니다.

1
import os, re
2
3
directory = os.listdir('/Users/DrAbder/Desktop/Abder')
4
os.chdir('/Users/DrAbder/Desktop/Abder')
5
6
for file in directory:
7
    open_file = open(file,'r')
8
    read_file = open_file.read()
9
    regex = re.compile('Adber')
10
    read_file = regex.sub('Abder', read_file)
11
    write_file = open(file,'w')
12
    write_file.write(read_file)

보다시피 파이썬의 for-loop를 이용하면 손쉽게 여러 파일을 수정할 수 있습니다. 여기서 기억해야 할 또 한 가지 중요한 부분은 정규 표현식을 패턴 일치에 사용하는 것입니다.

파이썬 루프에 대해 더 알고 싶다면 파이썬 루프 복습하기(A Smooth Refresher on Python's Loops)를 확인해 보십시오. 그리고 정규 표현식에 대한 자세한 내용은 파이썬의 정규 표현식(Regular Expressions in Python)을 확인해 보십시오.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.