我正在使用 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/'
扫描文件(路径)
我得到了正确的文件递归列表:
['/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/'
扫描文件(路径)
返回:[]
最佳答案
看起来 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+) 上,您可以使用递归 glob:
def scan_for_files(path):
return glob.glob(os.path.join(path, '**', '*.csv'), recursive=True)
Source .
关于python - 使用 glob 扫描文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50343406/