


Comment parcourir un dossier contenant un grand nombre de fichiers en utilisant Python ?
Lors du traitement des données d'entraînement d'un grand modèle, il est souvent nécessaire de parcourir des dossiers volumineux, qui peuvent inclure des dizaines ou des centaines de millions de fichiers. À ce stade, la fonction de traversée générale de Python sera très lente, comme par exemple. os.walk , glob, path.rglob, etc. Dans le même temps, le temps de parcours global ne peut pas être estimé.
Cet article utilise os.scandir de Python et est basé sur l'algorithme de recherche en largeur pour obtenir une traversée contrôlable et efficace des fichiers, et en même temps , affiche le journal de parcours. Prend en charge le filtrage des suffixes, supprime les fichiers cachés et implémente la fonction de parcours des dossiers contenant un grand nombre de fichiers.
os.scandir est une fonction d'itération de répertoire qui renvoie un itérateur d'objets os.DirEntry correspondant aux entrées du répertoire spécifié par chemin. Ces entrées sont générées dans n'importe quel ordre, à l'exclusion des entrées spéciales ». et«…». L'efficacité opérationnelle de os.scandir est supérieure à celle de os.walk Dans le PEP 471, les responsables de Python recommandent également d'utiliser os.scandir pour parcourir les répertoires.
Code source
def traverse_dir_files_for_large(root_dir, ext=""): """ 列出文件夹中的文件, 深度遍历 :param root_dir: 根目录 :param ext: 后缀名 :return: 文件路径列表 """ paths_list = [] dir_list = list() dir_list.append(root_dir) while len(dir_list) != 0: dir_path = dir_list.pop(0) dir_name = os.path.basename(dir_path) for i in tqdm(os.scandir(dir_path), f"[Info] dir {dir_name}"): path = i.path if path.startswith('.'): # 去除隐藏文件 continue if os.path.isdir(path): dir_list.append(path) else: if ext: # 根据后缀名搜索 if path.endswith(ext): paths_list.append(path) else: paths_list.append(path) return paths_list
Journal de sortie :
Supplementary[Info] Le chemin d'initialisation démarre !# 🎜 🎜#[Info] Chemin de l'ensemble de données : /alphafoldDB/pdb_from_uniprot
[Info] dir pdb_from_uniprot : 256it [00:10, 24.47it/s]
[Info] dir 00 : 240753it [00:30 , 7808.36it/s]
[Info] dir 01 : 241432it [00:24, 9975.56it/s]
[Info] dir 02 : 240466it [00:24, 9809.68it/s] #🎜 🎜 #[Info] dir 03 : 241236it [00:22, 10936.76it/s]
[Info] dir 04 : 241278it [00:24, 10011.14it/s]
[Info] dir 05 : 241348it [00:25, 9414.16it/s]
En plus des méthodes ci-dessus, l'éditeur a également vous fournit Nous avons compilé d'autres méthodes Python pour parcourir les dossiers. Si vous en avez besoin, vous pouvez vous y référer
Méthode 1 : parcourir os.walk() et traiter les fichiers directement.#🎜🎜 #
def traverse_dir_files(root_dir, ext=None, is_sorted=True): """ 列出文件夹中的文件, 深度遍历 :param root_dir: 根目录 :param ext: 后缀名 :param is_sorted: 是否排序,耗时较长 :return: [文件路径列表, 文件名称列表] """ names_list = [] paths_list = [] for parent, _, fileNames in os.walk(root_dir): for name in fileNames: if name.startswith('.'): # 去除隐藏文件 continue if ext: # 根据后缀名搜索 if name.endswith(tuple(ext)): names_list.append(name) paths_list.append(os.path.join(parent, name)) else: names_list.append(name) paths_list.append(os.path.join(parent, name)) if not names_list: # 文件夹为空 return paths_list, names_list if is_sorted: paths_list, names_list = sort_two_list(paths_list, names_list) return paths_list, names_list
def traverse_dir_files(root_dir, ext=None, is_sorted=True): """ 列出文件夹中的文件, 深度遍历 :param root_dir: 根目录 :param ext: 后缀名 :param is_sorted: 是否排序,耗时较长 :return: [文件路径列表, 文件名称列表] """ names_list = [] paths_list = [] for path in list(pathlib.Path(root_dir).rglob("*")): path = str(path) name = path.split("/")[-1] if name.startswith('.') or "." not in name: # 去除隐藏文件 continue if ext: # 根据后缀名搜索 if name.endswith(ext): names_list.append(name) paths_list.append(path) else: names_list.append(name) paths_list.append(path) if not names_list: # 文件夹为空 return paths_list, names_list if is_sorted: paths_list, names_list = sort_two_list(paths_list, names_list) return paths_list, names_list
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Lorsque vous utilisez Scapy Crawler, la raison pour laquelle les fichiers de stockage persistants ne peuvent pas être écrits? Discussion Lorsque vous apprenez à utiliser Scapy Crawler pour les robots de données, vous rencontrez souvent un ...

Précision avec Python: Source de sablier Dessin graphique et vérification d'entrée Cet article résoudra le problème de définition variable rencontré par un novice Python dans le programme de dessin graphique de sablier. Code...

Python Process Pool gère les demandes TCP simultanées qui font coincé le client. Lorsque vous utilisez Python pour la programmation réseau, il est crucial de gérer efficacement les demandes TCP simultanées. ...

Explorez profondément la méthode de visualisation de Python Functools.Partial Objet dans Functools.Partial en utilisant Python ...

Choix de la bibliothèque de développement d'applications de bureau multiplateforme Python De nombreux développeurs Python souhaitent développer des applications de bureau pouvant s'exécuter sur Windows et Linux Systems ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...
