Script Python pour trouver et compter les tokens de mots dans les noms de fichiers récursivement

Ce script peut être utilisé pour vous montrer quels mots existent dans les composants de noms de fichiers dans n’importe quelle arborescence de répertoires. Il montre combien de fois chaque mot apparaît dans les noms de fichiers. Le script utilise les modules os et collections pour parcourir l’arborescence de répertoires et compter les mots.

filename_token_counter.py
#!/usr/bin/env python3
import os
import re
from collections import Counter
import argparse

def list_files_recursively(directory):
    """Lister tous les fichiers récursivement dans le répertoire donné."""
    for root, _, files in os.walk(directory):
        for file in files:
            yield os.path.join(root, file)

def process_filename(filename, lower_tokens=False, ignore_numeric=False):
    """Retirer les extensions, tokeniser le nom de fichier, et retourner les tokens."""
    # Retirer l'extension
    name_without_extension = os.path.splitext(os.path.basename(filename))[0]

    # Tokeniser par espaces, tirets et tirets bas
    tokens = re.split(r'[\s\-_]+', name_without_extension)

    # Supprimer les tokens vides
    tokens = [token for token in tokens if token]

    # Optionnellement convertir en minuscules
    if lower_tokens:
        tokens = [token.lower() for token in tokens]

    # Optionnellement ignorer les tokens purement numériques
    if ignore_numeric:
        tokens = [token for token in tokens if not token.isnumeric()]

    return tokens

def build_token_counter(directory, lower_tokens=False, ignore_numeric=False):
    """Construire un Counter de tokens à partir de tous les noms de fichiers dans le répertoire."""
    counter = Counter()
    for file_path in list_files_recursively(directory):
        tokens = process_filename(file_path, lower_tokens, ignore_numeric)
        counter.update(tokens)
    return counter

def main():
    # Analyser les arguments
    parser = argparse.ArgumentParser(description="Tokenize filenames and count token occurrences.")
    parser.add_argument("directory", help="The directory to scan.")
    parser.add_argument("-s", action="store_true", help="Case-sensitive tokenization (default is case-insensitive).")
    parser.add_argument("-N", action="store_true", help="Ignore all-numeric tokens.")
    args = parser.parse_args()

    # Construire le compteur de tokens
    token_counter = build_token_counter(args.directory, lower_tokens=not args.s, ignore_numeric=args.N)

    # Imprimer les tokens triés avec les plus communs en bas
    print("\nToken counts (most common at the bottom):")
    for token, count in sorted(token_counter.items(), key=lambda item: (item[1], item[0])):
        print(f"{token}: {count}")

if __name__ == "__main__":
    main()

Check out similar posts by category: Python