시뮬레이션을 하면서 최적화나 머신러닝을 위해 대량의 텍스트 파일을 생성하곤 합니다. 텍스트 파일을 데이터 처리해주기 위해서 csv 확장자로 변경해야하는 일이 종종 있습니다. 아바쿠스라는 구조 시뮬레이션 소프트웨어를 사용해서 결과 값을 출력하게 되면 'rpt'라는 확장자가 튀어나오게 되는데, 대량의 rpt 파일을 csv 파일로 변환하는 방법을 예제로 하여 확장자를 변경하는 방법에 대해 공유하고자 합니다.
파일 확장자 변경 기본 코드
사실 확장자를 변경해주는 코드는 Shutil 패키지에서 제공하는 파일 복사 기능입니다. '.rpt'를 '.csv'로만 바꿔주면 간단하게 확장자를 변경할 수 있습니다. 이렇게 한개 파일의 확장자를 변경하는 것은 손이 파이썬을 실행시키는 것보다 빠를 것입니다. 하지만 몇 백, 몇 천개 단위의 파일이라면 손으로 하다 지쳐 잠에 들고 말것입니다.
import shutil
shutil.copy('D:/ExampleText.rpt', 'D:/ExampleText.csv')
다수 파일 확장자 변경 코드
다수의 파일 확장자를 변경하기 위해서는 당연히 루프를 돌려주어야 합니다. for문을 사용해서 루프를 돌리겠습니다. 파일은 아래와 같은 이름으로 저장되어 있습니다. 파일의 인덱스는 S이며 뒤에 숫자가 붙는 형태의 파일 입니다.
S1.rpt S2.rpt S3.rpt ··· S99.rpt S100.rpt
위와 같이 100개 파일의 확장자를 자동으로 변경하는 코드를 작성해보겠습니다. 사실 Shutil 패키지의 copy 매서드는 파일을 카피하는 기능이기 때문에 csv 파일이 생성된다고 하더라도 rpt 확장자의 파일이 그대로 남아있습니다. 남은 파일을 os 패키지의 remove 매서드를 사용해서 제거해주겠습니다. 코드는 아래와 같습니다.
# 패키지 선언
import shutil
import os
# 인덱스 선언
Index = "S"
for N in range(1, 101):
# 확장자 변경
shutil.copy('D:/{}{}.rpt'.format(Index, N), 'D:/{}{}.csv'.format(Index, N)
# 변경 전 파일 삭제
os.remove('D:/{}{}.rpt'.format(Index, N))
위와 같이 패키지를 먼저 선언하고 예제 파일의 인덱스인 "S"를 선언해줍니다. 이어서 for문을 사용해서 1번~100번 파일의 확장자를 변경할 수 있도록 기본 코드를 활용해서 코드를 작성했습니다. 변경 전 파일이 남아있는데 수동으로 지우기 귀찮으니 자동으로 지워주는 코드를 작성해주었습니다. 6줄의 코드만으로 대량의 파일 확장자를 변경할 수 있습니다. 또한, os 패키지를 사용해서 자동으로 Temp 파일을 삭제해줍니다. 이러한 코드를 사용하면 시간을 지정해서 파일을 옮길 수도 있습니다. 관련 내용은 차후에 포스팅하도록 하겠습니다.
댓글