Проверка наличия файла или каталога в 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— проверка, является ли файл исполняемым.
Читайте также:
- 5 важных аспектов замыканий в Python
- Создание GUI PyWebIO для удаления пакетов Python
- Наследование и полиморфизм в Python
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи George Pipis: How To Check if a File or Directory Exists in R, Python, and Bash





