파이썬으로 여러 폴더 빠르고 쉽게 만들기
본문 바로가기
파이썬(Python)/파이썬 개발

파이썬으로 여러 폴더 빠르고 쉽게 만들기

by Squat Lee 2021. 10. 14.

컴퓨터로 작업을 하다 보면 수많은 폴더를 만들어야 할 때가 있습니다.

 

이런일이 반복된다면 파이썬으로 프로그래밍을 해서 업무를 좀 더 효율화 시킬 수 있습니다.

 

우선 만들 폴더의 명을 엑셀파일에 입력하도록 하겠습니다.

C:D 열에 순서를 나타내는 번호와 폴더 이름을 입력했습니다. 주의할 점은 C열에 숫자는 문자입니다. 만약 숫자를 적으면 파이썬 코드에서 문자로 변경해 주어야 합니다.

 

수십개나 수백개를 하더라도 속도차이는 거의 없습니다. 일단 예시로 5개 폴더만 만들어 보겠습니다.

 

from openpyxl import load_workbook

from tkinter import *

from tkinter import filedialog

import os

 

모듈은 엑셀을 열어야 하니 openpyxl에서 기존 만들어진 엑셀이 필요하니 load_workbook을 가져왔습니다.

UI를 만들기 위해서 tkinter를 가져오고, 파일을 찾아서 선택하기 위해 'filedialog' 모듈을 가져왔습니다.

폴더를 만들기 위해서 'os'모듈을 까지 사용합니다.

 

win = Tk()

 

lbl = Label(win, text='폴더를 만들 엑셀파일을 선택해 주세요')

lbl.pack()

 

btn = Button(win, text='파일찾기', command=find_file)

btn.pack()

 

lbl_path = Label(win)

lbl_path.pack()

 

btn_mkf = Button(win, text='폴더만들기', command=folder_name)

btn_mkf.pack()

 

win.mainloop()

 

우선 UI를 만들어 줍니다. 사실 파이참에서만 작업하면 UI가 필요 없지만, 많은 프로그램을 만들거나 직장 동료 등 다른사람과 함께 프로그램을 공유하기 위해서는 UI를 만들면 편리합니다.

 

레이블 2개와 버튼 2개를 만들었습니다.

 

첫번째 레이블은 '폴더를 만들 엑셀파일을 선택해 주세요'라는 안내문이고, 두번째 레이블은 내가 선택했는 파일의 주소를 나타냅니다.

 

버튼은 폴더명이 적힌 엑셀파일을 찾는 함수와 연결된 것과 폴더를 만들 함수를 연결한 것을 각각 만들었습니다.

 

def find_file():

    global filename

    global path

    filename = filedialog.askopenfilename()

    lbl_path.config(text=filename)

    path = filename.split('/')[:-1]

    path = '/'.join(path)

 

폴더명이 적힌 엑셀파일을 찾아서 선택하는 함수입니다.

 

선택한 파일의 경로를 저장할 'filename'과 'filename'을 수정해서 저장할 변수 'path'는 다른 함수에서도 사용해야 하기 때문에 'global filename' 이렇게 전역변수로 선언을 해 줍니다.

 

filedialog.askopenfilename()을 사용하면 파일을 선택하기 위한 대화창이 나타나며, 선택한 파일의 경로가 반환됩니다. 이것을 레이블에 표시하려면 Label.config(text=filename) 이렇게 사용하면 됩니다.

 

선택한 엑셀파일의 경로에서 엑셀파일명만 제외하고 변수 'path'로 저장합니다. 나중에 폴더를 만들때 경로로 사용하기 위함입니다.

 

def folder_name():

    wb = load_workbook(filename)

    ws = wb.active

 

    w = 3

    while ws.cell(w, 3).value != None:

        FolderName = '[' + ws.cell(w, 3).value + ']' + ws.cell(w, 4).value

        FolderName = FolderName.replace('/'''# 파일 이름에 '/' 있으면 에러가 나기 때문에 삭제

        if not os.path.isdir(path + '/' + FolderName):

            os.mkdir(path + '/' + FolderName)

            print(path + '/' + FolderName)

        w += 1

 

폴더를 만드는 함수입니다.

 

openpyxl의 load.workbook(filename)으로 엑셀파일을 불러와서 활성화 된 시트를 'ws'로 저장합니다.

 

엑셀파일에서 3행부터 차례로 내려가면서 폴더이름을 만들고, 이것을 'FolderName'이라는 변수에 저장합니다. 혹시라도 폴더 이름에 '/'가 있으면, 에러가 나기 때문에 확인해서 없애줍니다.

 

'os.path.isdir'라는 함수로 내가 만들려고 하는 폴더가 있는지 확인하고, 없으면 'os.mkdir'을 사용해서 폴더를 만들어줍니다.

 

코드를 실행해 보겠습니다.

 

tkinter로 만든 UI에서 '파일찾기'버튼을 누른다음 미리 만들어 둔 폴더명이 적힌 엑셀파일을 선택합니다.

 

그럼 UI에서 선택한 파일의 경로 및 파일명이 레이블에 표시 됩니다. 

 

이어서 '폴더만들기' 버튼을 클릭합니다.

 

정상적으로 작동해서 폴더가 잘 만들어진 것을 확인할 수 있습니다.

 

아래는 전체 코드입니다.

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
from openpyxl import load_workbook
from tkinter import *
from tkinter import filedialog
import os
 
def find_file():
    global filename
    global path
    filename = filedialog.askopenfilename()
    lbl_path.config(text=filename)
    path = filename.split('/')[:-1]
    path = '/'.join(path)
 
def folder_name():
    wb = load_workbook(filename)
    ws = wb.active
 
    w = 3
    while ws.cell(w, 3).value != None:
        FolderName = '[' + ws.cell(w, 3).value + ']' + ws.cell(w, 4).value
        FolderName = FolderName.replace('/'''# 파일 이름에 '/' 있으면 에러가 나기 때문에 삭제
        if not os.path.isdir(path + '/' + FolderName):
            os.mkdir(path + '/' + FolderName)
            print(path + '/' + FolderName)
        w += 1
 
win = Tk()
 
lbl = Label(win, text='폴더를 만들 엑셀파일을 선택해 주세요')
lbl.pack()
 
btn = Button(win, text='파일찾기', command=find_file)
btn.pack()
 
lbl_path = Label(win)
lbl_path.pack()
 
btn_mkf = Button(win, text='폴더만들기', command=folder_name)
btn_mkf.pack()
 
win.mainloop()
cs
728x90
반응형

댓글