Форум сайта python.su
63
Вы что издеваетесь. Я вам же написал. Если на файл больше нет ссылок(файловый дискриптор, почти как переменная) - он естественно удаляется. Если файл имеет ссылки (где-то в программе тоже использовали такое название, которое должно было сработать, если…..), то он будет висеть…
Офлайн
18
4kptСм. фикс. Скорее всего дело в .read(), которая закрывает файл по завершении чтения
Вы что издеваетесь. Я вам же написал. Если на файл больше нет ссылок(файловый дискриптор, почти как переменная) - он естественно удаляется. Если файл имеет ссылки (где-то в программе тоже использовали такое название, которое должно было сработать, если…..), то он будет висеть…
open('file')
Отредактировано adray (Ноя. 9, 2012 22:05:09)
Офлайн
63
Попробовал. Получается, что правда. Файловый дискриптор не создается. Потому как нет прямой ссылки на файл… Буду теперь пользоваться. Хотя, не, наверное не буду. Привычка, как говорится. Привык отслеживать состояние данных в файле и методы его открытия, закрытия. Кроме того, такой инструкцией не откроешь файл для чтения и записи одновременно….
Отредактировано 4kpt (Ноя. 9, 2012 22:23:15)
Офлайн
Ну, как всегда: “начали про Фому, закончили про Ерему”). Я все время так читаю из файла при необходимости, от ситуации зависит, выглядет читабельно, никаких побочных эффектов не наблюдал до сих пор. Да и у Россума в учебнике есть такие строки в примере(ах).
Офлайн
25
Я проверил у себя - Python 2.7.1+ (r271:86832, Sep 27 2012, 21:16:52)
И подтверждаю такое поведение - после read() файла нет, но блин это же странно:
Objects/fileobject.c:1041 static PyObject *file_read(PyFileObject *f, PyObject *args)
(я так понимаю что именно эта часть отвечает за файловые объекты) - ну нет там указание на принудительное закрытие (либо я его проморгал).
Да и в доке ничего про такое поведение не говорится.
Офлайн
63
Я тоже искал, где происходит явное закрытие открытого дискриптора и не нашел… Странно. Но надо учесть.
Офлайн
25
Причем, он закрывается даже после gc.disable()
Офлайн
19
Пичаль… и эти люди дают советы по Python.
Начнем с того что Python в первую очередь опирается на механизм подсчета ссылок. GC работает когда есть циклические ссылки и простой подсчет ссылок уже не срабатывает. (Андрей Светлов, поправь если что не так)
По поводу как работать с файлами. Правильно сказали, что с файлами нужно работать через with.
Да это правда что в конструкции
open('filename').read()
def foo(): fd = open('filename') fd.read()
Отредактировано cutwater (Ноя. 10, 2012 00:16:07)
Офлайн
14
dimy44Ака s0rg-а?
или такsum_ = reduce(lambda x, y: int(x) + int(y), open(path_to_file))
Офлайн
25
cutwater
odnochlen
s0rgТо есть:
Причем, он закрывается даже после gc.disable()
import gc gc.disable() a = open('somefile').read()
Офлайн