Проверка
существует ли файл в папке на языке
Python
1.
os.path.isfile(path)
Эта функция возвращает true, если данный
путь является существующим обычным
файлом. Из этого следует, что символические
связи (symbolic links) в виде
os.path.islink(path)
тоже будут true пока
os.path.isfile(path)
также будет true. Это удобная функция, что
бы проверить существует ли файл. К
сожалению эта функция только проверяет
наличие файла, но не гарантирует имеет
ли пользователь доступ к этому файлу.
Она говорит вам, что файл существует
точно в момент вызова функции. Вполне
возможно (хотя не хотелось бы), что во
время между тем как вызвал функцию и
открываешь файл, его кто-то удалил и
перенес/переименовал.
Например, здесь показан такой случай
неудачного открытия файла:
1
2
3
4
5
6
|
>>> os.path.isfile('foo.txt')
True
>> f = open('foo.txt', 'r')
Traceback (most recent call last):
File "", line 1, in
IOError: [Errno 13] Permission denied: 'foo.txt'
|
2.
os.access(path, mode)
Эта функция проверяет имеет ли текущий
пользователь (с реальным uid/gid) доступ
(привилегии на чтение и/или запись) к
объекту с данным путем. Чтобы проверить
этот файл доступен на чтение используют
режим
os.R_OK
, а на запись
используют режим
os.W_OK
.
Например.
1
2
3
4
5
6
7
|
>>> # Check for read access to foo.txt
>>> os.access('foo.txt', os.R_OK)
True # This means the file exists AND you can read it.
>>>
>>> # Check for write access to foo.txt
>>> os.access('foo.txt', os.W_OK)
False # You cannot write to the file. It may or may not
exist.
|
Если вы планируете получить доступ к
файлу, использование этой функции
обезопасит вас попытка доступа к не
разрешенного для вас файла. Но возможность
того, что в период между проверкой
разрешенного доступа и физическим
открытием кто-то удалит или переименует
файл остается.
1
2
3
4
5
6
7
8
|
>>> # The file 'foo.txt' currently exists and is
readable.
>>> if os.access('foo.txt', os.R_OK):
>>> # After executing os.access() and before
open(),
>>> # another program deletes the file.
>>> f = open('foo.txt', 'r')
Traceback (most recent call last):
File "", line 1, in
IOError: [Errno 2] No such file or directory: 'foo.txt'
|
3. Доступ
к файлу (открытие файла).
Попытавшись открыть файл, вы не только
убедитесь, что файл существует но и
доступен для вас.
1
2
3
4
5
|
try:
f = open('foo.txt')
f.close()
except IOError as e:
print('Упс!')
|
Этот код можно легко трансформировать
в функцию.
1
2
3
4
5
6
7
8
9
|
def file_accessible(filepath, mode):
''' Проверка существует ли файл и
доступен ли. '''
try:
f = open(filepath, mode)
f.close()
except IOError as e:
return False
return True
|
Например, ее можно использовать
следующим образом:
1
2
3
4
5
6
7
|
>>> # Say the file 'foo.txt' exists and is readable,
>>> # whereas the file 'bar.txt' doesn't exist.
>>> foo_accessible = file_accessible('foo.txt', 'r')
True
>>>
>>> bar_accessible = file_accessible('bar.txt', 'r')
False
|