[Python/파이썬] 파일명이 중복되면 자동으로 파일명을 변경

코코._.

·

2021. 1. 14. 11:33

728x90



파이썬 코드를 짜면서 계속 실행하다보면 결과 파일의 이름이 같아서 덮어쓰기가 되는데, 그 전의 결과물도 남기고 싶을 때가 있어서 파일명을 자동 변경해주는 코드를 찾아보았다.

 

만일 동일한 파일명이 존재하면 뒤에 (1), (2), (3) .... 이렇게 숫자가 붙게 만들어보았다.

 

 

우선 동일한 파일명이 있는지 확인하고 파일명을 변경하는 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
import csv
 
input_path = r'D:/practice/original/'
filename='sample_merge' #파일명 고정값
file_ext='.csv' #파일 형식
 
output_path='D:/practice/%s%s' %(filename,file_ext)
uniq=1
while os.path.exists(output_path):  #동일한 파일명이 존재할 때
  output_path='D:/practice/%s(%d)%s' % (filename,uniq,file_ext) #파일명(1) 파일명(2)...
  uniq+=1
 
cs

변경되는 파일명은 아래 %s에 original 파일명, 괄호안에 (%d) 번호가, 마지막 %s에 파일 형식이 붙어서 생성된다.

output_path='D:/practice/%s(%d)%s' % (filename,uniq,file_ext)

 

변경되는 파일명의 형태를 바꾸고 싶으면 저 부분을 변경하면 된다.

 

 

 

또 다시 지난번 파일을 합치는 코드에 추가로 위의 코드를 적용해 보았다.

wonderlandcoco.tistory.com/88

[Python/파이썬] CSV 여러 파일 하나로 합치기

우선 합칠 CSV file을 3개 만들어서 D:/practice/original/ 경로에 저장하였다. sample01, sample02, sample03 파일은 각각 아래와 같이 만들었다. 아래의 코드를 사용하여 CSV 파일을 하나로 합쳐보았다. 1 2 3..

wonderlandcoco.tistory.com

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import csv
import glob
import os
 
input_path = 'D:/practice/original/'
filename='sample_merge'
file_ext='.csv'
 
output_path='D:/practice/%s%s' %(filename,file_ext)
uniq=1
while os.path.exists(output_path):
  output_path='D:/practice/%s(%d)%s' % (filename,uniq,file_ext)
  uniq+=1
 


file_list=glob.glob(input_path+'*.csv')
 
with open(output_path,'w'as f:
  for i, file in enumerate (file_list): #첫 번째 파일은 그대로 불러오기
    if i==0#첫 번째 파일은 그대로 불러오기
      with open(file,'r'as f2:
        while True:
          line=f2.readline()
          if not line:
            break
          f.write(line)
      print(file.split('\\')[-1])
 
    else:
      with open(file,'r'as f2:
        n=0
        while True:
          line=f2.readline()
          if n!=0 : #2번째 파일부터는 (헤더)제외
            f.write(line)
          if not line:
            break
          n+=1
      print(file.split('\\')[-1])
 
file_num=len(next(os.walk('D:/practice/original/'))[2])
print(file_num,' file merge complete...')
cs

 

첫 번째 실행 결과

두 번째 실행 결과

세 번째 실행 결과

 

이렇게 정상적으로 실행이 잘 되는 것을 확인할 수 있다.

300x250