코딩 연습/코딩배우기
폴더 파일리스트 추출하여 엑셀에 저장하고, 파일명 바꾸기(파일이름 일괄변경 포함)
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
◆ 주어진 파일명으로 파일 이름을 변경하기
[엑셀 컬럼(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
- 탐색기