Как сделать Python (серия 14 деталей)
Как человек, который буквально только что узнал о канонических URL-адресах и перекрестном сообщении, я решил, что попробую Dev.ta с одной из моих более популярных статей. Я надеюсь, вам понравится!
Проблема введение
Недавно я собирался прочитать некоторые данные из файла конфигурации, но я хотел, чтобы код был обратный совместимый. Другими словами, если файл конфигурации не существует, я хотел бы предположить исходные предустановленные значения. В противном случае я бы вытащил данные из файла конфигурации.
К счастью, я провел свое исследование и придумал решение. План состоял в том, чтобы проверить, существовал ли файл конфигурации. Если это так, программа будет читать из нее и заполнить необходимые поля. В противном случае программа будет опираться на некоторые произвольные предустановленные значения.
Для этого мне пришлось найти способ проверить существование файла. Оказывается, в Python есть много способов сделать это.
Решения
Если мы надеемся проверить, существует ли файл, есть несколько решений:
- Проверьте, существует ли файл с
Попробуйте/кроме
Блок (Python 2+) - Проверьте, существует ли файл с помощью
OS.Path
(Python 2+) - Проверьте, существует ли файл с помощью
Путь
объект (Python 3.4+)
Конечно, мы должны определить, какое решение лучше для нас!
Проверьте, существует ли файл с блоком TRY
Сначала в списке-блок попытки. В этом сценарии мы попытались открыть наш файл в блоке Try. Если файл не открывается, мы запускаем предустановленные значения. Например:
try: fh = open('/path/to/file', 'r') # Store configuration file values except FileNotFoundError: # Keep preset values
Это решение, пожалуй, самое простое и самые надежные, но Filenotfounderror
это обновление от Python 3. У вас будет больше проблем с поймом Ioerror
в Python 2.
Проверьте, существует ли файл с путем ОС
Другой вариант – вообще пропустить обработку ошибок и непосредственно убедиться, что путь существует. Например:
import os exists = os.path.isfile('/path/to/file') if exists: # Store configuration file values else: # Keep presets
Конечно, недостаток здесь – состояние гонки от строки 2 до строки 3. Если по какой -то причине файл конфигурации удаляется между строкой 2 и строкой 3, то скрипт будет сбоем. Если это не риск в вашем приложении, то это решение отличное.
Проверьте, существует ли файл с объектом пути
Если вы одержимы объектно-ориентированным программированием, как я, то, возможно, это решение для вас. Начиная с Python 3.4, мы можем обернуть нашу ссылку на файл в объект, который приводит к множеству новых функций. Например:
from pathlib import Path config = Path('/path/to/file') if config.is_file(): # Store configuration file values else: # Keep presets
Кроме того, это новое представление объекта позволяет нам использовать наш первоначальный блок Try-Except:
try: absolute_path = config.resolve() # Store configuration file values except FileNotFoundError: # Keep presets
Конечно, вам может не понадобиться вся эта функциональность. В конце концов, если чтение содержимого является целью, то первый вариант, вероятно, является лучшим.
Немного резюме
Используя приведенные выше методы, у нас есть несколько вариантов, чтобы проверить, существует ли файл в Python:
# Brute force with a try-except block try: fh = open('/path/to/file', 'r') except FileNotFoundError: pass # Leverage the OS package import os exists = os.path.isfile('/path/to/file') # Wrap the path in an object for enhanced functionality from pathlib import Path config = Path('/path/to/file') if config.is_file(): pass
Для целей этого урока нас интересовали только файлы. Однако эти решения могут быть адаптированы к Проверьте существование каталогов и символических ссылок , так что не бойтесь поиграть. Это красота Python!
Во всяком случае, спасибо за то, что нашли время, чтобы проверить эту статью. Если это ваш первый раз, и вы нашли эту статью полезной, почему бы и нет подписаться на кодировщик Renegade ? Подписка бесплатна, и вы всегда будете в курсе последнего контента.
Увидимся в следующий раз!
Как сделать Python (серия 14 деталей)
Оригинал: “https://dev.to/renegadecoder94/how-to-check-if-a-file-exists-in-python-11om”