Проверка наличия файла или каталога в 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