Сканирование путей к файлам с помощью glob - PullRequest
0 голосов
/ 15 мая 2018

Я ищу все .csv, находящиеся в подпапке с glob, например:

def scan_for_files(path):
    file_list = []
    for path, dirs, files in os.walk(path):
        for d in dirs:
            for f in glob.iglob(os.path.join(path, d, '*.csv')):
                file_list.append(f)
    return file_list

Если я позвоню:

path = r'/data/realtimedata/trades/bitfinex/' scan_for_files(path)

Iполучить правильный рекурсивный список файлов:

['/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_12.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_13.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_15.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_11.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_09.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_10.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_08.csv',
 '/data/realtimedata/trades/bitfinex/btcusd/bitfinex_btcusd_trades_2018_05_14.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_14.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_12.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_10.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_08.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_09.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_15.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_11.csv',
 '/data/realtimedata/trades/bitfinex/ethusd/bitfinex_ethusd_trades_2018_05_13.csv']

Однако при использовании фактического подкаталога, содержащего нужные мне файлы - он возвращает пустой список.Есть идеи, почему это происходит?Спасибо.

path = r'/data/realtimedata/trades/bitfinex/btcusd/' scan_for_files(path) возвращает: []

1 Ответ

0 голосов
/ 15 мая 2018

Похоже, btcusd - это каталог нижнего уровня.Это означает, что когда вы вызываете os.walk с путем r'/data/realtimedata/trades/bitfinex/btcusd/', переменная dirs будет пустым списком [], поэтому внутренний цикл for d in dirs: вообще не выполняется.

Myсовет будет переписать вашу функцию, чтобы перебирать файлы напрямую, а не каталоги ... не волнуйтесь, вы в конечном итоге доберетесь до места, такова природа каталога tree .

def scan_for_files(path):
    file_list = []
    for path, _, files in os.walk(path):
        for f in files:
            file_list.extend(glob.iglob(os.path.join(path, f, '*.csv'))

    return file_list

Однако в более поздних версиях Python (3.5+) вы можете использовать рекурсивный глоб:

def scan_for_files(path):
    return glob.glob(os.path.join(path, '**', '*.csv'), recursive=True)

Источник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...