Есть ли способ сканировать каталог, чтобы увидеть, сколько там файлов определенного типа? - PullRequest
0 голосов
/ 17 апреля 2020

Так что, если у меня есть каталог, как показано ниже, есть ли способ проверить, сколько файлов с указанным c кодом в названии. Например, если я хочу количество файлов, которые начинаются с 17042020, которое будет 6 из каталога ниже?

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 ]

1 голос
/ 17 апреля 2020

Вы можете использовать модуль pathlib или просто 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 голосов
/ 17 апреля 2020

В Unix / Linux / macOS (как и в вашей ОС), вы можете сделать это разными способами в оболочке .

Предполагая, что вы находитесь в указанной папке, вы можете сделать, например, :

ls | grep "1704202001" | wc | awk '{print $1}'

ls выведет список файлов / подпапок вашей папки grep отфильтрует ваш поиск только по строкам, содержащим ваш шаблон wc подсчитает количество строк / символов поиска awk вам нужно напечатать только первый столбец (w c ответит на 3 числа, нам интересен только первый)

Если вы хотите рекурсивный поиск , вы можете использовать find

find . -name "*1704202001*" | wc | awk '{print $1}'

find выполнит поиск в . и во всех подпапках для шаблона RegExp (поэтому мы используем подстановочный знак * для сопоставления с шаблоном в полном имени файла).

Последний, но не список, Вы можете подсчитать, сколько файлов содержат ваш шаблон (не в имени, а внутри самого файла). Вы можете сделать это, используя grep:

grep -R "1704202001" | wc | awk '{print $1}' 

Вы запрашивали Python, а также справку операционной системы , этот ответ для последнего:)

Надеюсь, это поможет некоторым из вас.

0 голосов
/ 17 апреля 2020

Используйте pathlib модуль, который теперь лучше всего подходит для путей

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 голосов
/ 17 апреля 2020

Используйте os, чтобы получить список с вашими файлами:

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