Python3 закрывает дескриптор файла внутри класса

Я пытаюсь закрыть файл внутри класса. Но что бы я ни пытался, оно остается открытым. Так что мой вопрос прост.

Почему не закрывается?

Любая помощь или объяснение очень приветствуется. Заранее спасибо!

import os
class LoopFolders:
    def __init__(self, targetFolder):
        self.targetFolder = targetFolder
        print('Target Folder:', targetFolder)

    def closeFile(self):
        self.logFile.close()
        print('All done!')

    def loop(self):
        self.logFile = open('FileList.txt', 'w')
        for root, subs, files in os.walk(self.targetFolder):
            print('Root:', root)
            self.logFile.write('Root:\n'+root+'\n')
        self.closeFile()

        # This doesn't work either:
        # self.logFile.close()

# code run example
run = LoopFolders('c:/')
run.loop()

1 ответ

Я решил проблему, поместив части записи под функцией with. Спасибо еще раз за помощь!

import os
class LoopFolders:
    def __init__(self, targetFolder):
        self.targetFolder = targetFolder
        print('Target Folder:', targetFolder)

    def loop(self):
        with open('fileList.txt', 'w') as self.logFile:
            for root, subs, files in os.walk(self.targetFolder):
                print('Root:', root)
                self.logFile.write('Root:\n')
                self.logFile.write(root+'\n')

                print('\tSubfolders:', subs)
                self.logFile.write('\tSubfolders:\n')
                for sub in subs:
                    self.logFile.write('\t'+sub+'\n')

                print('\t\tFiles:\n')
                self.logFile.write('\t\tFiles:\n')
                for file in files:
                    try:
                        print('\t\t', file, '\n')
                        self.logFile.write('\t\t'+file+'\n')
                    except:
                        print('File in', root, 'could not be read')
                        self.logFile.write('file in '+root+' could not be read')
                        continue
            self.logFile.write('\n\n')

run = LoopFolders('C:/').loop()
Другие вопросы по тегам