폴더를 선택하여 폴더 경로를 문자열로 리턴해주는 코드입니다.
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입니다!
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폴더를 선택하였고 아래와 같이 경로를 받아오는 것을 볼 수 있습니다.
댓글