dossier créer python Comment vérifier si un fichier existe sans exception?




15 Answers

Vous avez la fonction os.path.exists :

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

Ceci renvoie True pour les fichiers et les répertoires, mais vous pouvez plutôt utiliser

os.path.isfile(file_path)

pour tester si c'est un fichier spécifiquement. Il s'ensuit des liens symboliques.

python if exist file

Comment voir si un fichier existe ou non, sans utiliser l'instruction try ?




import os.path

if os.path.isfile(filepath):



import os
os.path.exists(path) # Returns whether the path (directory or file) exists or not
os.path.isfile(path) # Returns whether the file exists or not



C'est le moyen le plus simple de vérifier si un fichier existe. Ce n’est pas parce que le fichier existait lorsque vous avez coché que vous pourrez l’ouvrir lorsque vous aurez besoin de l’ouvrir.

import os
fname = "foo.txt"
if os.path.isfile(fname):
    print("file does exist at this time")
else:
    print("no such file exists at this time")






import os
#Your path here e.g. "C:\Program Files\text.txt"
#For access purposes: "C:\\Program Files\\text.txt"
if os.path.exists("C:\..."):   
    print "File found!"
else:
    print "File not found!"

L'importation de os facilite la navigation et l'exécution d'actions standard avec votre système d'exploitation.

Pour référence, voir également share

Si vous avez besoin d'opérations de haut niveau, utilisez shutil .




En 2016, le meilleur moyen consiste toujours à utiliser os.path.isfile :

>>> os.path.isfile('/path/to/some/file.txt')

Ou en Python 3, vous pouvez utiliser pathlib :

import pathlib
path = pathlib.Path('/path/to/some/file.txt')
if path.is_file():
    ...



Vous pouvez essayer ceci (plus sûr):

try:
    # http://effbot.org/zone/python-with-statement.htm
    # 'with' is safer to open a file
    with open('whatever.txt') as fh:
        # Do something with 'fh'
except IOError as e:
    print("({})".format(e))

La sortie serait:

([Errno 2] Aucun fichier ni répertoire de ce type: 'quel que soit le type de fichier')

Ensuite, en fonction du résultat, votre programme peut simplement continuer à partir de là ou vous pouvez programmer pour l’arrêter si vous le souhaitez.




Dans Python 3.4, le langage fournit un nouveau module pour gérer les fichiers:

import pathlib
path = pathlib.Path('path/to/file')
if path.is_file(): # If you want to check a directory: path.is_dir()
    # If it is true, return true on your code.



Si le fichier est destiné à l'ouverture, vous pouvez utiliser l'une des techniques suivantes:

>>> with open('somefile', 'xt') as f: #Using the x-flag, Python3.3 and above
...     f.write('Hello\n')

>>> if not os.path.exists('somefile'): 
...     with open('somefile', 'wt') as f:
...         f.write("Hello\n")
... else:
...     print('File already exists!')

METTRE À JOUR

Juste pour éviter toute confusion et sur la base des réponses que j'ai obtenues, la réponse actuelle trouve un fichier ou un répertoire portant le même nom.




Vous pouvez écrire la suggestion de Brian sans le try:.

from contextlib import suppress

with suppress(IOError), open('filename'):
    process()

suppressfait partie de Python 3.4. Dans les anciennes versions, vous pouvez rapidement écrire votre propre suppression:

from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass



Voici une commande Python d'une ligne pour l'environnement de ligne de commande Linux. Je trouve cela TRÈS HANDY puisque je ne suis pas un type Bash aussi sexy.

python -c "import os.path; print os.path.isfile('/path_to/file.xxx')"

J'espère que ceci est utile.




Je suis l'auteur d'un package qui existe depuis environ 10 ans et dont la fonction répond directement à cette question. Fondamentalement, si vous utilisez un système autre que Windows, il utilise Popenpour y accéder find. Cependant, si vous êtes sous Windows, il se réplique findavec un système de fichiers efficace.

Le code lui-même n'utilise pas de trybloc ... sauf pour déterminer le système d'exploitation et ainsi vous diriger vers le style "Unix" findou le hand-buillt find. Les tests de synchronisation ont montré que le trysystème d'exploitation était plus rapide à déterminer, alors j'en ai utilisé un ici (mais nulle part ailleurs).

>>> import pox
>>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False)
['/Users/mmckerns/.python']

Et le doc…

>>> print pox.find.__doc__
find(patterns[,root,recurse,type]); Get path to a file or directory

    patterns: name or partial name string of items to search for
    root: path string of top-level directory to search
    recurse: if True, recurse down from root directory
    type: item filter; one of {None, file, dir, link, socket, block, char}
    verbose: if True, be a little verbose about the search

    On some OS, recursion can be specified by recursion depth (an integer).
    patterns can be specified with basic pattern matching. Additionally,
    multiple patterns can be specified by splitting patterns with a ';'
    For example:
        >>> find('pox*', root='..')
        ['/Users/foo/pox/pox', '/Users/foo/pox/scripts/pox_launcher.py']

        >>> find('*shutils*;*init*')
        ['/Users/foo/pox/pox/shutils.py', '/Users/foo/pox/pox/__init__.py']

>>>

La mise en œuvre, si vous souhaitez regarder, est ici: https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190




Date: 2017-12-04

Toutes les solutions possibles ont été énumérées dans d’autres réponses.

Voici un moyen intuitif et discutable de vérifier l’existence d’un fichier:

import os
os.path.isfile('~/file.md')    # Returns True if exists, else False
additionaly check a dir
os.path.isdir('~/folder') # Returns True if the folder exists, else False
check either a dir or a file
os.path.exists('~/file')

J'ai fait une feuille de triche exhaustive pour votre référence:

#os.path methods in exhaustive cheatsheet
{'definition': ['dirname',
               'basename',
               'abspath',
               'relpath',
               'commonpath',
               'normpath',
               'realpath'],
'operation': ['split', 'splitdrive', 'splitext',
               'join', 'normcase'],
'compare': ['samefile', 'sameopenfile', 'samestat'],
'condition': ['isdir',
              'isfile',
              'exists',
              'lexists'
              'islink',
              'isabs',
              'ismount',],
 'expand': ['expanduser',
            'expandvars'],
 'stat': ['getatime', 'getctime', 'getmtime',
          'getsize']}



Comment vérifier si un fichier existe sans utiliser l'instruction try?

En 2016, c'est toujours le moyen le plus simple de vérifier si un fichier existe et s'il s'agit d'un fichier:

import os
os.path.isfile('./file.txt')    # Returns True if exists, else False

isfileest en fait juste une méthode d'assistance qui utilise en interne os.statet en stat.S_ISREG(mode)dessous. Il os.stats'agit d'une méthode de niveau inférieur qui vous fournira des informations détaillées sur les fichiers, les répertoires, les sockets, les tampons, etc. Plus d'informations sur os.stat ici

Note: Cependant, cette approche ne se verrouille pas le fichier en aucune façon et donc votre code peut devenir vulnérable à « moment de l' enregistrement en temps d'utilisation » ( TOCTTOU bogues).

Donc, lever des exceptions est considéré comme une approche acceptable, et Pythonic, pour le contrôle de flux dans votre programme. Et on devrait envisager de traiter les fichiers manquants avec IOErrors, plutôt que des ifdéclarations ( juste un conseil ).




Related