0
votes

Existe-t-il un moyen d'analyser un répertoire pour voir le nombre de fichiers d'un certain type?

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


2 commentaires

regardez os.walk


Vérifiez la réponse! - @ 15002941


4 Réponses :


0
votes

Utilisez OS pour obtenir une liste avec vos fichiers:

import os
list = os.listdir("path")
for element in list:
     if yourconditions:
          print(element)


0 commentaires

1
votes

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)


0 commentaires

0
votes

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()}")


0 commentaires

0
votes

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.


0 commentaires