понедельник, 4 июля 2016 г.

Проверка существует ли файл в папке на языке Python

Проверка существует ли файл в папке на языке 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

Jackson Cooper 

 

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога