Как перебирать файлы с помощью pathlib.glob (), когда файлы имеют очень похожие имена - PullRequest
0 голосов
/ 27 апреля 2020

My Directory выглядит следующим образом:

P1_AAA_NOT_SAMPLE.csv
P1_AAA_SAMPLE.csv
P1_BBB_NOT_SAMPLE.csv
P1_BBB_SAMPLE.csv
P1_CCC_NOT_SAMPLE.csv
P1_CCC_SAMPLE.csv

P2_AAA_NOT_SAMPLE.csv
P2_AAA_SAMPLE.csv
P2_BBB_NOT_SAMPLE.csv
P2_BBB_SAMPLE.csv
P2_CCC_NOT_SAMPLE.csv
P2_CCC_SAMPLE.csv

Как перебирать файлы в этом каталоге, используя pathlib.glob(), если я хочу захватывать только файлы SAMPLE (ie. Я не хочу файлы NOT_SAMPLE).

Мой код выглядит следующим образом:

from pathlib import Path

file_path = r'C:\Users\HP\Desktop\My Directory'

for fle in Path(file_path).glob('P*_*_SAMPLE.csv'):
    # do something with each SAMPLE file

Но этот код также будет захватывать как файлы SAMPLE, так и файлы NOT_SAMPLE. Есть ли способ настроить подстановочные знаки или glob() часть для захвата только SAMPLE файлов, предпочтительно используя pathlib?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Вы можете отфильтровать выражение генератора (или понимание списка), например:

for fle in (p for p in Path(file_path).glob('P*_*_SAMPLE.csv') if 'NOT_SAMPLE' not in str(p)):

или построить список раньше:

valid_paths = [p for p in Path(file_path).glob('P*_*_SAMPLE.csv') if 'NOT_SAMPLE' not in str(p)]

for fle in valid_paths:
1 голос
/ 27 апреля 2020

Примерно так, если в имени файла «нет»: сделать что-нибудь.

после вашего для l oop,

for fle in Path(file_path).glob('P*_*_SAMPLE.csv'):
    if 'NOT' not in str(file):
        #do something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...