原始答案:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
上面答案的 Python 3.6 版本,使用os
假设您在名为directory_in_str
的变量中将目录路径作为str
对象:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
或递归地使用pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
rglob
rglob('*.asm')
替换为glob('**/*.asm')
Path.glob()
并在给定相对模式前面添加'**/'
from pathlib import Path
pathlist = Path(directory_in_str).rglob('*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
这将遍历所有后代文件,而不仅仅是目录的直接子级:
import os
for subdir, dirs, files in os.walk(rootdir):
for file in files:
#print os.path.join(subdir, file)
filepath = subdir + os.sep + file
if filepath.endswith(".asm"):
print (filepath)
您可以尝试使用glob模块:
import glob
for filepath in glob.iglob('my_dir/*.asm'):
print(filepath)
从 Python 3.5 开始,您还可以搜索子目录:
glob.glob('**/*.txt', recursive=True) # => ['2.txt', 'sub/3.txt']
从文档中:
尽管结果以任意顺序返回,但 glob 模块会根据 Unix shell 使用的规则查找与指定模式匹配的所有路径名。没有波浪符号扩展,但是 * 、? 和用 [] 表示的字符范围将正确匹配。