Файл используется для постоянного хранения данных. Работа с файлом – очень распространенная задача любого языка программирования. В Python существует множество встроенных функций для создания, открытия, чтения, записи и закрытия файла. Для хранения данных можно создать два типа файлов. Это текстовые файлы и двоичные файлы. Любой файл необходимо открыть перед чтением или записью. Функция open() используется в Python для открытия файла. Использование функции open() – это один из способов проверить, открыт или закрыт конкретный файл. Если функция open() открывает ранее открытый файл, генерируется ошибка IOError. Другой способ проверить, открыт или закрыт файл – это проверить значения свойства closed объекта обработчика файлов. С использованием функции rename() – еще один способ проверить, открыт или закрыт файл. В этой статье показаны различные способы проверки открытия или закрытия любого файла в Python.
Создайте файл для проверки:
Вы можете использовать любой существующий файл или создать новый файл, чтобы протестировать пример кода, показанный в этой статьи. Был создан новый текстовый файл с именем clients.txt со следующим содержимым для использования в следующей части статьи.
ID Name Email 01 Andrey Ex Andrey***@gmail.com 02 Max Terminator Max***@gmail.com 03 Alex Murphy Alex***@gmail.com
Пример-1: проверьте, открыт файл или нет, с помощью IOError
IOError генерируется при вызове функции open() для открытия файла, который был открыт ранее. Создайте файл python со следующим сценарием, чтобы проверить, открыт ли файл или нет, с помощью блока try-except. Здесь любое существующее имя файла будет принято в качестве входных и открыто для чтения. Затем снова вызывается функция open(), чтобы открыть тот же файл, который вызовет ошибку IOError и распечатает сообщение об ошибке.
# Введите имя файла для проверки filename = input("Введите любое существующее имя файла:\n") # Откройте файл в первый раз с помощью функции open() fileHandler = open(filename, "r") # Попробуйте открыть файл с таким же именем снова try: with open("filename", "r") as file: # Распечатать сообщение об успешном завершении print("Файл открыт для чтения.") # Вызовите ошибку, если файл был открыт раньше except IOError: print("Файл уже открыт")
Вывод:
Здесь в текущем расположении существует файл clients.txt, а сообщение об ошибке «Файл уже открыт» было напечатано для исключения IOError.
Пример-2: проверьте, закрыт ли файл, используя свойство closed.
Значение свойства closed будет истинным, если какой-либо файл закрыт. Создайте файл python с помощью следующего сценария, чтобы проверить, закрыт ли файл в текущем местоположении. Предыдущий пример сценария выдаст ошибку, если имя файла, полученное от пользователя, не существует в текущем местоположении. В этом примере эта проблема решена. Модуль os используется здесь для проверки существования имени файла, которое будет взято у пользователя. Функция check_closed() определена для проверки того, закрыт ли файл или нет, которая будет вызываться, если файл существует.
# Импортировать модуль os для проверки существования файла import os # Функция Drfine проверяет, закрыт ли файл или нет def check_closed(): if fileHandler.closed == False: # Распечатать сообщение об успешном завершении print("Файл открыт для чтения.") else: # Распечатать сообщение об ошибке print(" Файл закрыт.") # Взять имя файла для проверки filename = input(" Введите любое существующее имя файла: \ n ") # Проверить, существует if os.path.exists(filename): # Открыть файл для чтения fileHandler = open(filename, "r") # Вызвать функцию check_closed() else: # Вывести сообщение, если файл не существует print("Файл не существует.")
Вывод:
Здесь client.txt существует в текущем месте, и сообщение об успешном завершении «Файл открыт для чтения» напечатано, поскольку значение свойства closed вернуло False.
Пример-3: проверьте, открыт файл или нет, с помощью OSError
OSError генерирует , когда функция переименования() вызывается более чем один раз для файла , который открыт уже. Создайте файл Python со следующим сценарием, чтобы проверить, открыт или закрыт файл с помощью OSError. Модуль os использовался в сценарии для проверки существования файла и его переименования. Когда функция rename() вызывается во второй раз, будет сгенерирована ошибка OSError, и будет напечатано настраиваемое сообщение об ошибке.
# Импортировать модуль os для проверки существования файла import os # Установить существующее имя файла filename = 'clients.txt' # Установить новое имя файла newname = 'customers.txt' # Проверить, существует ли файл или нет, if os.path.exists(filename): try: # Вызов функции переименования в первый раз os.rename(filename, newname) # Вызов функции переименования во второй раз os.rename(filename, newname) # Вызов исключения при ошибки, если если файл открыт except OSError: print («Файл все еще открыт».) else: # Вывести сообщение, если файл не существует print("Файл не существует.")
Вывод:
Здесь clients.txt существует в текущем местоположении, и сообщение об ошибке, “File is still opened,” напечатал , потому что OSError исключение генерируется , когда вторая функция rename() выполнена.
Вывод:
Когда нам нужно работать с одним и тем же файлом в сценарии несколько раз, важно знать, открыт ли файл или закрыт. Лучше вызвать функцию close(), чтобы закрыть файл после завершения операции с файлом. Ошибка возникает, когда файл открывается во второй раз в том же скрипте, не закрывая его. В этой статье на простых примерах показаны различные решения этой проблемы, которые помогут пользователям Python.