Je voudrais vérifier s'il y a des fichiers .rar dans un répertoire. il n’a pas besoin d’être récursif.
Utiliser le joker avec os.path.isfile () était ma meilleure hypothèse, mais cela ne fonctionnait pas. Que puis-je faire alors?
Merci.
glob est ce dont vous avez besoin.
>>> import glob
>>> glob.glob('*.rar') # all rar files within the directory, in this case the current working one
os.path.isfile()
renvoie True
si un chemin est un fichier régulier existant. Donc, cela est utilisé pour vérifier si un fichier existe déjà et ne supporte pas les caractères génériques. glob
fait.
Sans utiliser os.path.isfile()
vous ne saurez pas si les résultats renvoyés par glob()
sont des fichiers ou des sous-répertoires, essayez plutôt quelque chose comme ceci:
import fnmatch
import os
def find_files(base, pattern):
'''Return list of files matching pattern in base folder.'''
return [n for n in fnmatch.filter(os.listdir(base), pattern) if
os.path.isfile(os.path.join(base, n))]
rar_files = find_files('somedir', '*.rar')
Vous pouvez également simplement filtrer les résultats renvoyés par glob()
si vous le souhaitez, ce qui présente l’avantage de faire quelques opérations supplémentaires relatives à Unicode, etc. Vérifiez la source dans glob.py si cela compte.
[n for n in glob(pattern) if os.path.isfile(n)]
Les caractères génériques sont développés par Shell et vous ne pouvez donc pas les utiliser avec os.path.isfile ()
Si vous souhaitez utiliser des caractères génériques, vous pouvez utiliser popen with Shell = True
ou os.system()
>>> import os
>>> os.system('ls')
aliases.sh
default_bashprofile networkhelpers projecthelper.old pythonhelpers virtualenvwrapper_bashrc
0
>>> os.system('ls *.old')
projecthelper.old
0
Vous pouvez également obtenir le même effet avec le module glob.
>>> import glob
>>> glob.glob('*.old')
['projecthelper.old']
>>>
import os
[x for x in os.listdir("your_directory") if len(x) >= 4 and x[-4:] == ".rar"]
iglob est meilleur que glob ici car vous ne voulez pas réellement la liste complète des fichiers rar, mais vous voulez juste vérifier qu’il existe un rar
pour afficher le chemin complet et le filtre en fonction de l'extension,
import os
onlyfiles = [f for f in os.listdir(file) if len(f) >= 5 and f[-5:] == ".json" and isfile(join(file, f))]
Si vous vous souciez simplement de l'existence d'au moins un fichier et que vous ne voulez pas en avoir la liste:
import glob
import os
def check_for_files(filepath):
for filepath_object in glob.glob(filepath):
if os.path.isfile(filepath_object):
return True
return False