Donc, si j'ai un répertoire comme ci-dessous, y a-t-il un moyen de scanner le nombre de fichiers avec un code spécifique dans son nom. Par exemple, si je veux le nombre de fichiers commençant par 17042020, qui serait 6 dans le répertoire ci-dessous?
1704202001-01.csv 1704202001-02.csv 1704202002-01.csv 1704202002-02.csv 1704202003-01.csv 1704202003-02.csv 001.png 002.pdf 003.docx 004.jpg
4 Réponses :
Utilisez OS pour obtenir une liste avec vos fichiers:
import os list = os.listdir("path") for element in list: if yourconditions: print(element)
vous pouvez utiliser le module pathlib ou simplement glob :
from pathlib import Path folder = Path(dir_of_files) specific_files = list(folder.glob('1704202001-*.csv') #or : list(folder.rglob('1704202001-*.csv') ... this will recursively search thru every subfolder for files that match this print(specific_files)
Utilisez le module pathlib
qui est maintenant le meilleur pour les chemins
import pathlib from typing import List """! @brief Finds files with the given unique code in name in directory @param[in] directory pathlib.Path directory of searching @param[in] unique_code str code in the filename @return List[pathlib.Path] list of filepaths with unique code in name """ def find_files(directory:pathlib.Path, unique_code:str) -> List[pathlib.Path]: result:List[pathlib.path] = list() for filepath in directory.glob('*'): if filepath.is_file() and unique_code in filepath.name: result.append(filepath) return result # Set Your directory! directory:pathlib.Path = pathlib.Path('your/dir') unique_code:str = '17042020' found_files:List[pathlib.Path] = find_files(directory, unique_code) print(f"Found files with unique code [{unique_code}]: {len(found_files)}") for filepath in found_files: print(f" {filepath.resolve()}")
Sous Unix / Linux / macOS (donc avec votre système d'exploitation), vous pouvez le faire de plusieurs façons dans le shell .
En supposant que vous êtes dans le dossier spécifié, vous pouvez faire par exemple:
grep -R "1704202001" | wc | awk '{print $1}'
ls
listera vos fichiers / sous-dossiers de dossier
grep
filtrera votre recherche avec uniquement les lignes contenant votre motif
wc
comptera le nombre de lignes / caractères de la recherche
awk
sera invité à n'imprimer que la première colonne (wc répondra à 3 nombres, seul le premier est intéressant pour nous)
Si vous voulez une recherche récursive , vous pouvez utiliser find
find . -name "*1704202001*" | wc | awk '{print $1}'
find
effectuera une recherche dans . code > et tous les sous-dossiers du modèle RegExp (nous utilisons donc le caractère générique
*
pour faire correspondre le modèle dans un nom de fichier complet).
Dernier mais pas la liste, vous peut vouloir compter le nombre de fichiers contenant votre motif (pas dans le nom, mais dans le fichier lui-même). Vous pouvez le faire en utilisant grep
:
ls | grep "1704202001" | wc | awk '{print $1}'
Vous demandiez Python mais aussi l'aide du système d'exploitation , cette réponse est pour la fin :)
J'espère que cela aidera certains d'entre vous.
regardez
os.walk
Vérifiez la réponse! - @ 15002941