코딩 연습/코딩배우기

폴더 파일리스트 추출하여 엑셀에 저장하고, 파일명 바꾸기(파일이름 일괄변경 포함)

good4me 2022. 3. 15. 11:21

지정한 폴더에 있는 파일을 읽어와서 엑셀에 저장하는 코드와, 불러들인 파일명에 대응하여 주어진 이름(엑셀에 '변경 파일명' 컬럼 이용)으로 파일 이름을 바꾸는 코드를 만들어봤다.

 

 

◆ 지정 폴더 내 파일들을 읽고 파일명을 엑셀에 저장하기

탐색기 - 파일리스트

 

먼저, 탐색기 폴더(위 이미지 참고)에 있는 파일 리스트를 읽어오는 코드는 다음과 같다.

 

[소스 코드]  Tkinter로 만든 실행 파일(exe) 다운로드

import pathlib
import openpyxl


def read_files(dir_path, filename):

    wb = openpyxl.Workbook()
    ws = wb['Sheet']  # wb.active
    xl_filename = filename + '.xlsx'
    ws.cell(1, 1).value = 'No'
    ws.cell(1, 2).value = '읽은 파일명'
    ws.cell(1, 3).value = '변경 파일명'
    wb.save('./' + xl_filename)

    path = pathlib.Path(dir_path)
    print(path)  # D:\pythonDev\rename_test

    files = path.glob('*')
    print(files)
    # <generator object Path.glob at 0x0000026DEF913F90>

    row_cnt = 2 
    for file in list(files):
        # print(file)
        if file.is_file():
            print(file.name)
            ws.cell(row_cnt, 1).value = row_cnt - 1
            ws.cell(row_cnt, 2).value = file.name
            row_cnt += 1

    wb.save('./' + xl_filename)
    wb.close()


directory = r'D:\pythonDev\rename_test'
rfilename = 'file_rename_test'

read_files(directory, rfilename)

- 엑셀 워크북을 생성하고 제목 행(No, 읽은 파일명, 변경 파일명)을 만든다.

- pathlib.Path()로 파일(폴더)객체를 만들어 path 변수에 저장(제너레이터 타입)한 후 glob()으로 파일(폴더) 리스트를 읽어온다.

- for 문으로 파일인 것만 엑셀에 저장한다.

- pathlib 라이브러리 사용법은 여기 참조

 

[실행 결과]

- 터미널

D:\pythonDev\rename_test
<generator object Path.glob at 0x00000241B900BCF0>
캡처_2022_03_11_21_55_18_720.png
캡처_2022_03_11_22_02_27_435.png
캡처_2022_03_11_22_12_48_329.png
캡처_2022_03_13_10_57_15_505.png
캡처_2022_03_13_10_57_23_870.png

 

- 엑셀 파일 - file_rename_test.xlsx

엑셀 리스트

 

good4me.co.kr


 

◆ 주어진 파일명으로 파일 이름을 변경하기

[엑셀 컬럼(C열)에 변경할 파일명 추가]

엑셀 리스트
엑셀 리스트

※ 주의 : 변경 파일명에 중복이 있으면 안 됨

 

파일 리스트 엑셀에서 파일명을 변경하기 위한 '변경 파일명'을 입력한다.

(특히, 동일하지 않는 파일명을 일괄적으로 변경할 때 유용함)

 

 

[소스 코드]  Tkinter로 만든 실행 파일(exe) 다운로드

def rename_files(dir_path, filename):

    xl_filename = filename + '.xlsx'
    wb = openpyxl.load_workbook('./' + xl_filename)
    ws = wb['Sheet']  # wb.active

    path = pathlib.Path(dir_path)
    print(path)  # D:\pythonDev\rename_test

    files = path.glob('*')
    print(files)
    # <generator object Path.glob at 0x0000026DEF913F90>

    print(ws.max_row)
    for file in list(files):
        if file.is_file():
            for r in range(2, ws.max_row + 1):
                if file.name == ws.cell(r, 2).value:
                    file.rename(path / ws.cell(r, 3).value)
                    print(f'Row: {ws.cell(r, 1).value}')
        else:
            print(f'{file} - 파일 아님!')

    wb.close()

    
directory = r'D:\pythonDev\rename_test'
rfilename = 'file_rename_test'

rename_files(directory, rfilename)

- 폴더 파일을 읽은 파일(폴더)객체를 만들어서 for 문을 통해 각 파일명에 맞는 엑셀의 파일명을 비교하고,

- 파일명이 일치하면 file.rename() 메서드로 파일명을 변경한다.

 

[실행 결과]

- 터미널

D:\pythonDev\rename_test
<generator object Path.glob at 0x000002D6A1A82F90>
6
D:\pythonDev\rename_test\test - 파일 아님!        
Row: 1
Row: 2
Row: 3
Row: 4
Row: 5​

 

- 탐색기

탐색기 - 파일명 변경