하위폴더 파일들을 모두 검색해서 파일로 만드려는데, print와 append값이 다름.
조회수 539회
제가 하위폴더 파일들을 모두 검색해서 파일로 만드는 프로젝트를 만드려 하는데 print로 하면 값이 잘나오지만 append로 리스트에 추가하고 리스트를 리턴하니 print로 나온값들이 들어가 있지 않습니다.
import os
from tkinter import filedialog
from tkinter import *
class FileList:
def FolderOpen(self):
window = Tk().withdraw()
dirName=filedialog.askdirectory(initialdir="/",title='확인할 디렉토리를 선택해주세요.')
return dirName
def FileSave(self):
window = Tk().withdraw()
title = '파일 저장'
ftypes = [('txt FIle', '.txt'), ('All files', '*')]
filename = filedialog.asksaveasfilename(filetypes=ftypes, title=title, initialfile='FileSearch.txt')
return filename
def search(self, dirname):
files = list()
try:
filenames = os.listdir(dirname)
for filename in filenames:
full_filename = os.path.join(dirname, filename)
if os.path.isdir(full_filename):
self.search(full_filename)
else:
print(full_filename)
files.append(full_filename)
return files
except PermissionError:
pass
File = FileList()
FolderFind = File.FolderOpen()
filename = File.FileSave()
file = File.search(FolderFind)
print(file)
print된 것들과 append된 리스트의 값이 달라요. 코드는 조코딩님꺼 참고하였습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
files가 함수가 실행될 때마다 초기화되는 것으로 보입니다.
리스트에 영향을 주는 다른 요소가 없다면 다음과 같이 리스트를 함수 밖으로 꺼내두는건 어떨까요?
import os from tkinter import filedialog from tkinter import * files = list() class FileList: def FolderOpen(self): window = Tk().withdraw() dirName=filedialog.askdirectory(initialdir="/",title='확인할 디렉토리를 선택해주세요.') return dirName def FileSave(self): window = Tk().withdraw() title = '파일 저장' ftypes = [('txt FIle', '.txt'), ('All files', '*')] filename = filedialog.asksaveasfilename(filetypes=ftypes, title=title, initialfile='FileSearch.txt') return filename def search(self, dirname): #files = list() try: filenames = os.listdir(dirname) for filename in filenames: full_filename = os.path.join(dirname, filename) if os.path.isdir(full_filename): self.search(full_filename) else: print(full_filename) files.append(full_filename) return files except PermissionError: pass File = FileList() FolderFind = File.FolderOpen() filename = File.FileSave() file = File.search(FolderFind) print(file)
댓글 입력