6467 votes

Comment vérifier si un fichier existe sans exception ?

Comment puis-je vérifier si un fichier existe ou non, sans utiliser la fonction try déclaration ?

9 votes

Pour vérifier si un objet Path existe indépendamment du fait qu'il s'agisse d'un fichier ou d'un répertoire, utilisez my_path.exists() .

0 votes

my_path.exists() n'est pas suffisant. my_path.is_file() vous dira si c'est un fichier (ce qui peut être utile pour la lecture). Mais si vous voulez créer le fichier, vous devez aussi vérifier exists afin d'exclure les répertoires ou d'autres éléments non liés aux fichiers dans le système de fichiers qui provoqueront l'échec.

0 votes

6462 votes ? ?? WAT ?? Lire à ce sujet dans le livre de programmation

5913voto

rslite Points 17279

Si la raison pour laquelle vous vérifiez est que vous pouvez faire quelque chose comme if file_exists: open_it() il est plus sûr d'utiliser un try autour de la tentative d'ouverture. Vérifier puis ouvrir risque d'entraîner la suppression ou le déplacement du fichier entre le moment où vous vérifiez et celui où vous essayez de l'ouvrir.

Si vous ne prévoyez pas d'ouvrir le fichier immédiatement, vous pouvez utiliser la fonction os.path.isfile

Retourner à True si le chemin est un fichier régulier existant. Ceci suit les liens symboliques, donc les deux islink() y isfile() peuvent être vraies pour le même chemin.

import os.path
os.path.isfile(fname) 

si vous voulez être sûr que c'est un fichier.

À partir de Python 3.4, la fonction pathlib module offre une approche orientée objet (rétroportée vers pathlib2 dans Python 2.7) :

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists

Pour vérifier un répertoire, faites :

if my_file.is_dir():
    # directory exists

Pour vérifier si un Path existe indépendamment du fait qu'il s'agisse d'un fichier ou d'un répertoire, utilisez la fonction exists() :

if my_file.exists():
    # path exists

Vous pouvez également utiliser resolve(strict=True) dans un try bloc :

try:
    my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
    # doesn't exist
else:
    # exists

62 votes

En ce qui concerne la première remarque (utiliser "try" si l'on vérifie avant d'ouvrir), cela ne fonctionnera malheureusement pas si vous voulez ouvrir pour ajouter en étant sûr que cela existe avant, puisque le mode 'a' créera si cela n'existe pas.

13 votes

Notez que FileNotFoundError a été introduit dans Python 3. Si vous devez également prendre en charge Python 2.7 ainsi que Python 3, vous pouvez utiliser IOError à la place (ce qui FileNotFoundError sous-classes) stackoverflow.com/a/21368457/1960959

15 votes

@makapuf Vous pouvez l'ouvrir pour la "mise à jour" ( open('file', 'r+') ) et ensuite chercher jusqu'à la fin.

2398voto

PierreBdR Points 11479

Vous avez le os.path.exists fonction :

import os.path
os.path.exists(file_path)

Ce retour True à la fois pour les fichiers et les répertoires, mais vous pouvez à la place utiliser

os.path.isfile(file_path)

pour tester s'il s'agit spécifiquement d'un fichier. Il suit les liens symboliques.

1105voto

bortzmeyer Points 12246

Contrairement à isfile() , exists() retournera True pour les répertoires. Ainsi, selon que vous voulez seulement des fichiers simples ou également des répertoires, vous utiliserez isfile() o exists() . Voici une sortie REPL simple :

>>> os.path.isfile("/etc/password.txt")
True
>>> os.path.isfile("/etc")
False
>>> os.path.isfile("/does/not/exist")
False
>>> os.path.exists("/etc/password.txt")
True
>>> os.path.exists("/etc")
True
>>> os.path.exists("/does/not/exist")
False

784voto

Paul Points 6185
import os

if os.path.isfile(filepath):
   print("File exists")

399voto

Yugal Jindle Points 5931

Utilisez os.path.isfile() con os.access() :

import os

PATH = './file.txt'
if os.path.isfile(PATH) and os.access(PATH, os.R_OK):
    print("File exists and is readable")
else:
    print("Either the file is missing or not readable")

66 votes

Avoir de multiples conditions, dont certaines sont superflues, c'est moins claire et explicite.

14 votes

Il est également redondant. Si le fichier n'existe pas, os.access() retournera faux.

9 votes

@EJP Dans linux les fichiers peuvent exister mais ne sont pas accessibles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X