Сдача файлов в каталог каталогов без внутренних каталогов - PullRequest
0 голосов
/ 30 июня 2018

Моя задача - обучить модели ML. Я хочу выдать файлы, чтобы избежать проблем с памятью в будущем. Я наткнулся на решение, которое я немного скорректировал. Но модификация не совсем соответствует моим потребностям. Предположим, что структура папок у меня выглядит следующим образом:

.. /

A /

2014-01-01

2014-01-05

2014-01-06

/ B

2014-01-02

2014-01-06

...

Так по сути в папке: test, у меня есть подкаталоги вроде: A, B .. и т. Д. В каждом из этих подкаталогов у меня есть даты: 2014-01-01 и т. Д.

Мне нужен мой генератор, чтобы выдавать мне файлы в порядке даты и времени, игнорируя сами каталоги (порядок подкаталогов не имеет значения, я могу сначала получить файлы из B, а затем из A, не имеет значения) .

У меня есть следующий код atm:

def sort_func(x):
    x_ = x
    x = str(x)
    # dates - files
    try:
        return datetime.datetime.strptime(x, "%Y-%m-%d")
    # folder. Ignore
    except ValueError as e:
        return x_
    except Exception as e:
        raise(e)

p = pathlib.Path('../datasets/train/')

a = sorted(p.glob('**/*'), key=sort_func)

И это выглядело бы примерно так:

[PosixPath('../datasets/train/A'),
 PosixPath('../datasets/train/A/2014-01-01'),
 PosixPath('../datasets/train/A/2014-01-02'),
 PosixPath('../datasets/train/A/2014-01-03'),
...]

т.е. Мне не нужен первый путь и все пути к каталогам.

Как мне их опустить?

РЕДАКТИРОВАТЬ: На самом деле, кажется, что glob возвращает список ... p.glob('*/*'), кажется, делает трюк, но sorted(.) дает мне список вместо того, чтобы выдавать файлы один за другим

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете фильтровать с помощью метода is_file объекта Path:

a = sorted([path for path in p.glob('**/*') if path.is_file()], key=sort_func)
...