본문 바로가기
코딩 연습/코딩배우기

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

by good4me 2022. 3. 15.

goodthings4me.tistory.com

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

 

 

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

탐색기 - 파일리스트

 

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

 

[소스 코드]  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​

 

- 탐색기

탐색기 - 파일명 변경

 

댓글