본문 바로가기
Python/자동화도구

python - 폴더 선택하여 경로만 가져오기/경로 문자반환(tkinter, filedialog, askdirectory)

by 하나다음은둘 2023. 2. 17.

폴더를 선택하여 폴더 경로를 문자열로 리턴해주는 코드입니다.

askdirectory 사용법만 보고 싶으면 아래 2) askdirectory - (tkinter filedialog의 askdirectory) 만 보시면 됩니다.

 

이전글 (python - 파일 선택하여 파일 경로 및 파일 명칭 가져오기)에서 사용했던 코드를 같이 넣었습니다. 라인10~ 23 의 설명을 보고 싶으신 분들은 이전글을 확인하시면 됩니다. 혼동되지만 가져온 이유는 제 코드를 보고 활용하는 분들이 재사용을 더욱 쉽게하기 위하여 적었습니다. 

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
from tkinter import filedialog
import os
 
class Openfile_OnenextTwo:
    def __init__(self, nameSavedpath = "default_text.txt", fileExtension=r"*.*"):
        self.nameFile = nameSavedpath
        self.filePath = nameSavedpath
        self.fileExtension = fileExtension
 
    def findFile(self):
        try:
            with open(self.filePath) as f:
                self.filePath = f.read()
                self.filePath = self.filePath[:self.filePath.rfind("/")]
        except FileNotFoundError as e:
            self.filePath='C:\\Users'
        file=filedialog.askopenfilenames(filetypes=(("all file",self.fileExtension),("all file","*.*")),initialdir=self.filePath)
 
        with open(self.nameFile,"wt"as f:
            s = str(file[0])
            f.write(s)
 
        return str(file[0])
 
    def findFolder(self):
        try:
            with open(self.filePath) as f:
                self.filePath = f.read()
                self.filePath = self.filePath[:self.filePath.rfind("/")]
        except FileNotFoundError as e:
            self.filePath='C:\\Users'
 
        pathFolder = filedialog.askdirectory(initialdir=self.filePath)
        print("pathFolder type : ", type(pathFolder))
 
        with open(self.nameFile,"wt"as f:
            print("s type : ", pathFolder)
            f.write(pathFolder)
 
        return pathFolder
cs

 

 

아래는 위의 코드 중 findFolder에 대한 내용입니다.

 

1) Class 설계(Openfile_OnenextTwo) - findFolder

폴더명을 찾기 위한 전체 코드입니다. class가 아닌 그냥 함수로 사용하셔도 상관 없습니다.

설명규칙) 설명은 코드 위에 적어놓겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def findFolder(self):
    try:
        with open(self.filePath) as f:
            self.filePath = f.read()
            self.filePath = self.filePath[:self.filePath.rfind("/")]
    except FileNotFoundError as e:
        self.filePath='C:\\Users'
 
    pathFolder = filedialog.askdirectory(initialdir=self.filePath)
    print("pathFolder type : ", type(pathFolder))
 
    with open(self.nameFile,"wt"as f:
        print("s type : ", pathFolder)
        f.write(pathFolder)
 
    return pathFolder
cs

 

1) file경로 설정

GUI로 사용시 파일경로를 재선택 했을 때 이전에 들어갔던 경로를 저장해주는 코드이다. 

Default코드는 C:\\Users 경로로 하였다.

(코드줄 1~4 파일 ,이전 경로저장, 5~6 - Default경로 - 이 내용에 대해선 다른글인 python - 폴더 or 파일을 열고 기존 경로 저장하기 에 작성해 두었습니다.)

1
2
3
4
5
6
try:
    with open(self.filePath) as f:
        self.filePath = f.read()
        self.filePath = self.filePath[:self.filePath.rfind("/")]
except FileNotFoundError as e:
    self.filePath='C:\\Users'
cs

 

2) askdirectory - (tkinter filedialog의 askdirectory)

라인1 - initialdir에 최초로 open될 경로를 넣어줍니다. 열고자하는 폴더를 선택하면 해당 경로의 문자열이 반환된다

라인2 - return type은?

1
2
pathFolder = filedialog.askdirectory(initialdir=self.filePath)
print("pathFolder type : ", type(pathFolder))
cs

실행결과 - return type은 str입니다!

return type은 str!

3) 다시 폴더를 열고 싶을 때 이전에 열었던 폴더위치를 텍스트 파일에 저장합니다. 

1
2
with open(self.nameFile,"wt") as f:
    f.write(pathFolder)
cs

4) 폴더명을 return합니다.

1
return pathFolder
cs

2) 실제 사용

1) 라인 4 - OpenFileofFolder.py 파일에 위의 class를 정의했습니다.

2) 라인 6 - 기존에 열었던 파일경로를 저장하기 위한 text 파일이름 설정

3) 라인 7 - 검색하고 싶은 확장자명칭

4) 라인 9 - class 선언

5) 라인 11 - class에 내가 만든 findFolder() 사용하여 savePath변수에 저장

6) 라인 13 - 파일 directory + 파일명이 잘 나왔는지 saveDirectory변수에 저장된 경로를 print

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
from tkinter import *
 
import OpenFileorFolder
 
saveFolderpath = "my_save_folder.txt"
extensitonTxt = r"*.txt"
 
myFindpathclass = OpenFileorFolder.Openfile_OnenextTwo(saveFolderpath,extensitonTxt)
 
savePath = myFindpathclass.findFolder()
 
print("savePath : ",savePath)
cs

 

 

코드를 실행하면 파일을 선택 할 수 있고 저는 test_folder폴더를 선택하였고 아래와 같이 경로를 받아오는 것을 볼 수 있습니다.

결과 출력 Console

 

댓글