Réponses:
Réponse originale:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Version Python 3.6 de la réponse ci-dessus, en utilisant os
- en supposant que vous avez le chemin du répertoire en tant str
qu'objet dans une variable appelée directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Ou récursivement, en utilisant pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
besoin d'être changé pour print(os.path.join(directory_in_str, filename))
le faire fonctionner en python 3.6
for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
àif filename.endswith(".asm") or filename.endswith(".py"):
Cela parcourra tous les fichiers descendants, pas seulement les enfants immédiats du répertoire:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
#print os.path.join(subdir, file)
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print (filepath)
Vous pouvez essayer d'utiliser le module glob :
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
et depuis Python 3.5, vous pouvez également rechercher des sous-répertoires:
glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']
De la documentation:
Le module glob trouve tous les chemins correspondant à un modèle spécifié selon les règles utilisées par le shell Unix, bien que les résultats soient retournés dans un ordre arbitraire. Aucune expansion de tilde n'est effectuée, mais *,? Et les plages de caractères exprimées avec [] seront correctement mises en correspondance.
Depuis Python 3.5, les choses sont beaucoup plus faciles avec os.scandir ( )
with os.scandir(path) as it:
for entry in it:
if entry.name.endswith(".asm") and entry.is_file():
print(entry.name, entry.path)
L'utilisation de scandir () au lieu de listdir () peut augmenter considérablement les performances du code qui nécessite également des informations sur le type ou l'attribut de fichier, car les objets os.DirEntry exposent ces informations si le système d'exploitation les fournit lors de l'analyse d'un répertoire. Toutes les méthodes os.DirEntry peuvent effectuer un appel système, mais is_dir () et is_file () nécessitent généralement un appel système uniquement pour les liens symboliques; os.DirEntry.stat () nécessite toujours un appel système sous Unix mais n'en requiert qu'un pour les liens symboliques sous Windows.
entry
est un posix.DirEntry de type avec un tas de méthodes pratiques telles que entry.is_dir()
, is_file()
,is_symlink()
Python 3.4 et versions ultérieures proposent pathlib dans la bibliothèque standard. Vous pourriez faire:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
Ou si vous n'aimez pas les listes de compréhension:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
Path
les objets peuvent facilement être convertis en chaînes.
Voici comment j'itère les fichiers en Python:
import os
path = 'the/name/of/your/path'
folder = os.fsencode(path)
filenames = []
for file in os.listdir(folder):
filename = os.fsdecode(file)
if filename.endswith( ('.jpeg', '.png', '.gif') ): # whatever file types you're using...
filenames.append(filename)
filenames.sort() # now you have the filenames and can do something with them
AUCUNE DE CES TECHNIQUES NE GARANTIT TOUTE COMMANDE D'ITÉRATION
Oui, super imprévisible. Notez que je trie les noms de fichiers, ce qui est important si l'ordre des fichiers est important, par exemple pour les images vidéo ou la collecte de données en fonction du temps. Assurez-vous cependant de mettre des index dans vos noms de fichiers!
from pkg_resources import parse_version
et l'a filenames.sort(key=parse_version)
fait.
Vous pouvez utiliser glob pour référencer le répertoire et la liste:
import glob
import os
#to get the current working directory name
cwd = os.getcwd()
#Load the images from images folder.
for f in glob.glob('images\*.jpg'):
dir_name = get_dir_name(f)
image_file_name = dir_name + '.jpg'
#To print the file name with path (path will be in string)
print (image_file_name)
Pour obtenir la liste de tous les répertoires du tableau, vous pouvez utiliser os :
os.listdir(directory)
Je ne suis pas encore très satisfait de cette implémentation, je voulais avoir un constructeur personnalisé qui le fasse de DirectoryIndex._make(next(os.walk(input_path)))
telle sorte que vous puissiez simplement passer le chemin pour lequel vous voulez une liste de fichiers. Modifications bienvenues!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
J'aime vraiment utiliser la scandir
directive intégrée à la os
bibliothèque. Voici un exemple de travail:
import os
i = 0
with os.scandir('/usr/local/bin') as root_dir:
for path in root_dir:
if path.is_file():
i += 1
print(f"Full path is: {path} and just the name is: {path.name}")
print(f"{i} files scanned successfully.")