使用glob扫描文件路径

2024-10-17 08:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在搜索位于glob子文件夹中的所有.csv,如下所示:

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)

我得到了正确的递归文件列表:

['/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) 返回:[]


Tags: csvpathinfordatascanfilestrades
1条回答
网友
1楼 · 发布于 2024-10-17 08:29:35

看起来btcusd是一个底层目录。这意味着当使用r'/data/realtimedata/trades/bitfinex/btcusd/'路径调用os.walk时,dirs变量将是一个空列表[],因此内部循环for d in dirs:根本不会执行

我的建议是重新编写函数,直接遍历文件,而不是目录。。。别担心,你最终会到达那里的,这就是目录树的本质

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)

Source

相关问题 更多 >