这是我所拥有的:
glob(os.path.join('src','*.c'))
但是我想搜索src的子文件夹。这样做是可行的:
glob(os.path.join('src','*.c'))
glob(os.path.join('src','*','*.c'))
glob(os.path.join('src','*','*','*.c'))
glob(os.path.join('src','*','*','*','*.c'))
但这显然是有限和笨拙的。
这是我所拥有的:
glob(os.path.join('src','*.c'))
但是我想搜索src的子文件夹。这样做是可行的:
glob(os.path.join('src','*.c'))
glob(os.path.join('src','*','*.c'))
glob(os.path.join('src','*','*','*.c'))
glob(os.path.join('src','*','*','*','*.c'))
但这显然是有限和笨拙的。
当前回答
import os, glob
for each in glob.glob('path/**/*.c', recursive=True):
print(f'Name with path: {each} \nName without path: {os.path.basename(each)}')
Glob.glob ('*.c'):匹配当前目录下所有以.c结尾的文件 Glob.glob ('*/*.c'):与1相同 Glob.glob ('**/*.c'):只匹配直接子目录中以.c结尾的所有文件,不匹配当前目录 glob.glob('*.c',recursive=True):与1相同 glob.glob('*/*.c',recursive=True):与3相同 glob.glob('**/*.c',recursive=True):匹配当前目录和所有子目录中以.c结尾的所有文件
其他回答
刚刚做了这个..它将以分层的方式打印文件和目录
但我没有使用fnmatch或walk
#!/usr/bin/python
import os,glob,sys
def dirlist(path, c = 1):
for i in glob.glob(os.path.join(path, "*")):
if os.path.isfile(i):
filepath, filename = os.path.split(i)
print '----' *c + filename
elif os.path.isdir(i):
dirname = os.path.basename(i)
print '----' *c + dirname
c+=1
dirlist(i,c)
c-=1
path = os.path.normpath(sys.argv[1])
print(os.path.basename(path))
dirlist(path)
import sys, os, glob
dir_list = ["c:\\books\\heap"]
while len(dir_list) > 0:
cur_dir = dir_list[0]
del dir_list[0]
list_of_files = glob.glob(cur_dir+'\\*')
for book in list_of_files:
if os.path.isfile(book):
print(book)
else:
dir_list.append(book)
从Python 3.4开始,可以在新的pathlib模块中使用Path类之一的glob()方法,它支持**通配符。例如:
from pathlib import Path
for file_path in Path('src').glob('**/*.c'):
print(file_path) # do whatever you need with these files
更新: 从Python 3.5开始,glob.glob()也支持相同的语法。
简化版的Johan Dahlin的回答,没有fnmatch。
import os
matches = []
for root, dirnames, filenames in os.walk('src'):
matches += [os.path.join(root, f) for f in filenames if f[-2:] == '.c']
对于python >= 3.5,可以使用**,递归=True:
import glob
for f in glob.glob('/path/**/*.c', recursive=True):
print(f)
如果递归为True(默认为False),模式**将匹配任何文件和零 或者更多的目录和子目录。如果模式后面跟着 一个操作系统。Sep,只有目录和子目录匹配。
Python 3演示