Повторное открытие закрытого файла Python - PullRequest
0 голосов
/ 30 мая 2018

У меня есть файловый объект "file", который я открыл:

with open("text.txt","rb") as file:
    #read some line
file.write("texte") # i know that doesn't work

Я просто хочу знать, могу ли я снова открыть этот файл, потому что Python имеет всю информацию о нем,но он говорит, что этот файл закрыт.я пытаюсь прочитать некоторые строки в файле и в конце я напишу новую строку в конце файла, поэтому я хочу снова открыть этот файл в режиме добавления enter image description here

Я вызываю функцию, которая принимает в качестве параметра дескриптор файла, поэтому я не могу повторно использовать open в первый раз, потому что имя файла неизвестно внутри функции, которую я хочу знать, могу ли я снова открыть дескриптор?или это невозможно сделать?потому что я могу использовать тот же метод и открыть его с помощью: with open("filename") as anotherfile

1 Ответ

0 голосов
/ 30 мая 2018

Проще говоря: снова откройте файл:

with open("text.txt","r") as file:
    #read some line

with open(file.name,"a") as file:
    file.write("texte") # now it works

Теперь вы упоминаете в комментарии, что:

я передаю этот дескриптор файла в качестве параметра в вызове функции, поэтомуимя файла внутри функции неизвестно, поэтому повторное открытие файла тем же методом внутри функции невозможно, поэтому я спрашиваю, как открыть дескриптор файла

Теперь этоКак правило, функция не должна закрывать / открывать ресурс, который был предоставлен вызывающей стороной, например:

def foo(fname):
    with open(fname) a file:
       bar(file)

def bar(file):
   file.close()
   with open(file.name, "a") as f2:
      f2.write("...")

- плохая практика - здесь bar НЕ ДОЛЖЕН закрывать файл, только используйте его - удаление файла является обязанностью foo (или того, кто называл bar). Так что если вам нужен такой шаблон, значит, что-то не так с вашим дизайном, и вам лучше будет исправитьспроектируйте сначала.

Обратите внимание, что вы можете открыть файл для добавления, не закрывая первый дескриптор:

def bar(file):
   with open(file.name, "a") as f2:
      f2.write("...")

, но это все равно может испортить ожидания вызывающего абонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...