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
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow