powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: считываем текст из файла
10 сообщений из 10, страница 1 из 1
Python: считываем текст из файла
    #39136656
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть класс для чтения данных из файла, пишем для класса unittest и запускаем
в результате тест выдает предупреждение, о том, что считываемый файл остался открытым

Код: css
1.
2.
3.
4.
5.
6.
7.
8.
9.
pydev debugger: starting (pid: 7401)
/home/user/data01/Code/Python/mySqlFileLoader/mySqlFileLoader/modules/tests/fileReader.py:15: 
ResourceWarning: unclosed file <_io.TextIOWrapper name='../../settings/queries/test_query.txt' mode='r' encoding='UTF-8'>
  actual = self.qreader.readQuery()
.
----------------------------------------------------------------------
Ran 1 test in 0.004s

OK



Вопрос: почему появилось предупреждение? почему файл не закрылся?

Класс (для считывания)
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class QueryFileReader():

    def __init__(self, query_file):
        self.query_file = query_file
        
    def readQuery(self):
        query = ""
        try:
            f = open(self.query_file, 'r')
        except FileNotFoundError:
            print('File does not exist: ', self.query_file)
            return
        except:
            print('error has occured while opening ', self.query_file)
            return
        else:         
            for line in f:
                query = query + " " + line
            f.close
            return(query) 



Тест:
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import unittest
from mySqlFileLoader.modules.fileReader import QueryFileReader

class TestQueryFileReader(unittest.TestCase):
    
    def test_QueryFileReader_readQuery_ok(self):
        self.qreader = QueryFileReader('../../settings/queries/test_query.txt')
        actual = self.qreader.readQuery()
        expected = " /* Test file: */\n /* for testing filereader script */"
        self.assertEqual(actual, expected, "The query text is not as expected.")

        
if __name__ == '__main__':
    unittest.main() 
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39136706
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,

открой для себя контекстные менеджеры
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39136937
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,


ты мне код не поправишь?
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39136943
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHook,

пожалуйста =)

пока ничего кроме как поместить все считывание в try в голову не приходит
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39137036
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabты мне код не поправишь
нет
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39137040
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabпока ничего кроме как поместить все считывание в try в голову не приходит
Я тебе дал ссылку на статью. Что там можно не понять? Там текст элементарный, на русском языке, с примерами.
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39138151
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте with
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39138208
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-хорошему нужно было бы переписать __enter__ и __exit__
для QueryFileReader, но не хватает опыта и знаний

поэтому сделала пока так:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class QueryFileReader():

    def __init__(self, query_file):
        self.query_file = query_file
    
        
    def readQuery(self):          
        try:
            f = open(self.query_file, 'r')
            query = f.read()
            f.close()
            return( query )
        except FileNotFoundError:
            print( 'File {} does not exist: '.format(self.query_file) )
            return
        except:
            print('error has occured while opening {} '.format(self.query_file) )
            return
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39138468
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabно не хватает опыта и знаний
да нет, нехватает просто мозгов

Код: python
1.
2.
3.
with open(self.query_file, 'r') as f:
    query = f.read()
    return( query )



жри
...
Рейтинг: 0 / 0
Python: считываем текст из файла
    #39140826
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почти что книжная версия:

Код: python
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.
41.
class QueryFileReader():
    """
    class QueryFileReader
        properties:
           query_file: location of query file
        methods:
            readQuery(): reads query file into string
    """
    def __init__(self, query_file):
        self.query_file = query_file
    
        
    def readQuery(self):   
        file=None       
        try:
            file = open(self.query_file, 'r')
            query = file.read()
        
        except FileNotFoundError:
            print( 'File {} does not exist: '.format(self.query_file) )
            return
        
        except UnicodeDecodeError:
            print('The contents of the file were in an unknown encoding.')
            return 0
        
        except:
            import sys
            e = sys.exc_info()
            print('error has occured while opening {} '.format(self.query_file) )
            print('Error type:', e[0])
            print('Error message:', e[1])
            print('Error traceback: ', e[2])
            return
        
        else:
            return(query)
        
        finally:
            if file:
                file.close()
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: считываем текст из файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]