하위폴더 파일들을 모두 검색해서 파일로 만드려는데, 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된 리스트의 값이 달라요. 코드는 조코딩님꺼 참고하였습니다.

  • 죄송한데 append 명령어가 보이지 않는데, 어느 부분이 리스트 append를 담당하는 코드인가요? 초보자 2021.2.2 18:12
  • 죄송합니다 ㅠㅠ 아까 고쳤는데 이전 코드를 드렸네요;; 수정했습니다 알 수 없는 사용자 2021.2.2 18:15

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)
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)