Как я могу проверить, закрыт ли файл или нет в python? - PullRequest
6 голосов
/ 30 апреля 2020

Как я могу проверить, что файл "имя_файла" все еще открыт или нет с помощью этой команды?

csv_gen = (row for row in open(file_name))

Я знаю, что мы должны использовать что-то вроде

with open(file_name) as file_name_ref:
    csv_gen = (row for row in file_name_ref)

, но что случилось и Как я могу проверить поведение, если я использую предыдущую команду.

Ответы [ 2 ]

6 голосов
/ 30 апреля 2020

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

import psutil
open_files = [x.path for x in psutil.Process().open_files()]

Если file_name в списке, то он открыт, возможно, несколько раз.

3 голосов
/ 30 апреля 2020

Одним из способов является копание самого объекта generator, чтобы найти ссылку на экземпляр TextIOWrapper, возвращаемый open; этот экземпляр имеет атрибут closed.

csv_gen.gi_frame.f_locals['.0'].closed

Как только генератор исчерпан, gi_frame станет None, после чего файл будет закрыт или нет, зависит от того, TextIOWrapper был убран мусором.

(Это ужасный способ сделать это, но я потратил 10 минут, копаясь в объекте, поэтому хотел поделиться :))

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