Parcourir les fichiers et les sous-dossiers en Python
j'aimerais parcourir le répertoire courant et tous ses sous-dossiers et tous les fichiers .htm/.extensions html. J'ai découvert qu'il est possible de savoir si un objet est un dir ou fichier comme ceci:
import os
dirList = os.listdir("./") # current directory
for dir in dirList:
if os.path.isdir(dir) == True:
# I don't know how to get into this dir and do the same thing here
else:
# I got file and i can regexp if it is .htm|html
et à la fin, je voudrais avoir tous les fichiers et leurs chemins d'accès dans un tableau. Est quelque chose comme ça possible?
5 réponses
Vous pouvez utiliser os.walk()
récursive de parcourir un répertoire et tous ses sous-répertoires:
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith((".html", ".htm")):
# whatever
Pour générer une liste de ces noms, vous pouvez utiliser une compréhension de liste:
htmlfiles = [os.path.join(root, name)
for root, dirs, files in os.walk(path)
for name in files
if name.endswith((".html", ".htm"))]
Utiliser newDirName = os.path.abspath(dir)
pour créer un nom de chemin de répertoire complet pour le sous-répertoire et ensuite lister son contenu comme vous l'avez fait avec le parent (i.e. newDirList = os.listDir(newDirName)
)
vous pouvez créer une méthode séparée de votre code snippet et l'appeler récursivement à travers la structure de sous-répertoires. Le premier paramètre est le nom du répertoire. Cela changera pour chaque sous-répertoire.
cette réponse est basée sur la documentation de la version 3.1.1 de la bibliothèque Python. Il est un bon modèle exemple de ceci en action à la page 228 de la bibliothèque de référence Python 3.1.1 (Chapitre 10-accès aux fichiers et aux répertoires). Bonne Chance!
j'avais une chose similaire à travailler, et c'est comme ça que je l'ai fait.
import os
rootdir = os.getcwd()
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(".html"):
print (filepath)
Espérons que cette aide.
version légèrement modifiée de la solution de Sven Marnach..
import os
folder_location = 'C:\SomeFolderName'
file_list = create_file_list(folder_location)
def create_file_list(path):
return_list = []
for filenames in os.walk(path):
for file_list in filenames:
for file_name in file_list:
if file_name.endswith((".txt")):
return_list.append(file_name)
return return_list
en python 3 vous pouvez utiliser os.scandir ():
for i in os.scandir(path):
if i.is_file():
print('File: ' + i.path)
elif i.is_dir():
print('Folder: ' i.path)