Как проверить наличие файла или каталога в R, Python и Bash?

Проверка наличия файла или каталога в R

Для этого примера мы создали файл myfile.txt и каталог my_test_folder.

Как проверить наличие файла?

Наличие файла легко проверить с помощью команды file.exists() из базового пакета. Посмотрите следующий пример:

if (file.exists("myfile.txt")) {  
  print("The file exists")
} else {  
  print("The file does not exist")
}

И мы получаем:

[1] "The file exists"

Попробуем теперь с файлом, которого не существует:

if (file.exists("nofile.txt")) {  
  print("The file exists")
} else {  
  print("The file does not exist")
}

Здесь получаем:

[1] "The file does not exist"

Обратите внимание, что выражение if not file exists записывается также и с добавлением ! внутри оператора if вот таким образом:

if (!file.exists("myfile.txt"))

Кроме того, при необходимости создать пустой файл выполняется такая команда:

file.create("mynewfile.txt")

Как проверить наличие каталога?

По аналогии с проверкой наличия файла, при которой используется file.exists(), наличие каталогов проверяется с помощью команды dir.exists(). Например:

if (dir.exists("my_test_folder")) {  
  print("The directory exists")
} else {  
  print("The file does not exist")
}

И мы получаем:

[1] "The directory exists"

Теперь выполним следующее упражнение. Проверим, есть ли каталог. Если его нет, создадим новый:

if (dir.exists("my_new_folder")) {  
  print("The directory exists")
} else {  
  # создаем "my_new_folder
  dir.create("my_new_folder")
}

Папка my_new_folder создается в нашем рабочем каталоге.

Проверка наличия файла или каталога в Python

Для этого примера опять же используем файл myfile.txt и каталог my_test_folder.

Как проверить наличие файла?

Здесь мы будем работать с модулем os:

import os.pathif os.path.isfile('myfile.txt'):
    print("The file exists")
else:
    print("The file does not exist")

Кроме того, здесь задействуется модуль pathlib:

from pathlib import Path
my_file = Path("myfile.txt")
if my_file.is_file():
    print("The file exists")
else:
    print("The file does not exist")

В Python есть возможность создать пустой файл с помощью команды with open(filename.txt, 'w'). Например:

import osif not os.path.isfile('myfile.txt'):
    with open('myfile.txt', 'w'): pass

Или:

if not os.path.isfile('myfile.txt'):
    file_name = 'myfile2.txt'
    f = open(file_name, 'w')
    f.close()

При открытии файла помните о следующих режимах:

w  режим записи
r  режим чтения
a  режим добавления
w+  файл создается, если его нет, и открывается в режиме (пере-)записи
    [если файл уже существует, он перезаписывается]
r+  существующий файл открывается в режиме чтения и записи
a+  файл создается, если его нет, и открывается в режиме добавления

Как проверить наличие каталога?

Это, опять же, аналогично проверке наличия файла:

import os.pathif os.path.isdir('my_test_folder'):
    print("The directory exists")
else:
    print("The directory does not exist")

И мы получаем:

The directory exists

Каталог создается следующим образом:

import os
if not os.path.isdir('my_folder'):
    os.makedirs('my_folder')

Чтобы проверить, существует ли объект Path независимо или является файлом/каталогом, используется exists():

from pathlib import Pathmy_file = Path("/path/to/file")
if my_file.exists():
    # path существует

Или с помощью модуля os:

import os.pathpath.exists("myfile.txt")

Проверка наличия файла или каталога в Bash

Как проверить наличие файла?

Для этого примера снова используем файл myfile.txt и каталог my_test_folder. Здесь мы будем работать с флагом -f, с помощью которого проверяется наличие обычного файла, а не каталога.

Задействуем скрипт mycheck.sh, который выглядит следующим образом:

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

touch filename.txt

Как проверить наличие каталога?

Здесь используем флаг -d. Задействуем скрипт dircheck.sh:

if [ -d my_test_folder ] 
then
    echo "The directory exists"
else 
   echo "The directory does not exist"
fi

Мы получили сообщение о том, что каталог существует.

Обратите внимание, что для создания каталога выполняется следующая команда:

mkdir yourdirectory

Отметим также, что выражение if not содержит символ !:

if [ ! -d my_test_folder ]

И в завершение приведем перечень необходимых флагов для проверки файлов и каталогов в Bash:

  • -b filename  —  блочный файл устройств.
  • -c filename  —  символьный файл устройств.
  • -d directoryname  —  проверка наличия каталога.
  • -e filename  —  проверка наличия файла независимо от типа (узел, каталог, сокет и т. д.).
  • -f filename  —  проверка наличия обычного файла, а не каталога.
  • -G filename  —  проверка, существует ли файл и принадлежит ли он эффективному идентификатору группы.
  • -G filename set-group-id  —  True, если файл существует и у него set-group-id (установка идентификатора группы во время выполнения).
  • -k filename  —  дополнительный атрибут и специальный тип разрешений файла/каталога Sticky bit.
  • -L filename  —  символическая ссылка.
  • -O filename  —  True, если файл существует и принадлежит эффективному идентификатору пользователя.
  • -r filename  —  проверка, доступен ли файл для чтения.
  • -S filename  —  проверка, является ли файл сокетом.
  • -s filename  —  проверка ненулевого размера файла.
  • -u filename  —  проверка, установлен ли для файла бит set-user-id (установка идентификатора пользователя во время выполнения).
  • -w filename  —  проверка, доступен ли файл для записи.
  • -x filename  —  проверка, является ли файл исполняемым.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи George Pipis: How To Check if a File or Directory Exists in R, Python, and Bash

Предыдущая статья5 важных аспектов замыканий в Python
Следующая статьяOpenTelemetry и Sentry - недооцененные инструменты трассировки распределенных систем на Golang