Как я могу пересечь файловую систему с генератором?

Можно сделать простой класс с общедоступными полями и никакими методами в Java, но это - все еще класс и все еще обрабатывается синтаксически и с точки зрения выделения памяти точно так же, как класс. Нет никакого способа действительно воспроизвести структуры в Java.

24
задан Evan Kroske 9 November 2009 в 01:00
поделиться

3 ответа

Зачем изобретать велосипед, если можно использовать os.walk

import os
for root, dirs, files in os.walk(path):
    for name in files:
        print os.path.join(root, name)

os.walk - это генератор, который генерирует имена файлов в дереве каталогов, перемещаясь по дереву сверху вниз или снизу вверх

57
ответ дан 28 November 2019 в 22:16
поделиться

Вы можете использовать path.py . К сожалению, веб-сайта автора больше нет, но вы все еще можете загрузить код из PyPI. Эта библиотека является оболочкой для функций пути в модуле os .

path.py предоставляет метод walkfiles () , который возвращает генератор, рекурсивно повторяющий все файлы в каталог:

>>> from path import path
>>> print path.walkfiles.__doc__
 D.walkfiles() -> iterator over files in D, recursively.

        The optional argument, pattern, limits the results to files
        with names that match the pattern.  For example,
        mydir.walkfiles('*.tmp') yields only files with the .tmp
        extension.

>>> p = path('/tmp')
>>> p.walkfiles()
<generator object walkfiles at 0x8ca75a4>
>>> 
0
ответ дан 28 November 2019 в 22:16
поделиться

Я согласен с решением os.walk

В чисто педантичных целях попробуйте перебрать объект-генератор вместо того, чтобы возвращать его напрямую:


def grab_files(directory):
    for name in os.listdir(directory):
        full_path = os.path.join(directory, name)
        if os.path.isdir(full_path):
            for entry in grab_files(full_path):
                yield entry
        elif os.path.isfile(full_path):
            yield full_path
        else:
            print('Unidentified name %s. It could be a symbolic link' % full_path)
12
ответ дан 28 November 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: