Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: считываем текст из файла / 10 сообщений из 10, страница 1 из 1
24.12.2015, 01:22
    #39136656
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
есть класс для чтения данных из файла, пишем для класса 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
24.12.2015, 08:25
    #39136706
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
mini.weblab,

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


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

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

пока ничего кроме как поместить все считывание в try в голову не приходит
...
Рейтинг: 0 / 0
24.12.2015, 13:08
    #39137036
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
mini.weblabты мне код не поправишь
нет
...
Рейтинг: 0 / 0
24.12.2015, 13:10
    #39137040
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
mini.weblabпока ничего кроме как поместить все считывание в try в голову не приходит
Я тебе дал ссылку на статью. Что там можно не понять? Там текст элементарный, на русском языке, с примерами.
...
Рейтинг: 0 / 0
25.12.2015, 13:51
    #39138151
MMM_Corp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
используйте with
...
Рейтинг: 0 / 0
25.12.2015, 14:41
    #39138208
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
по-хорошему нужно было бы переписать __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
25.12.2015, 20:35
    #39138468
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: считываем текст из файла
mini.weblabно не хватает опыта и знаний
да нет, нехватает просто мозгов

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



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

Код: 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
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: считываем текст из файла / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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