我需要遍历给定目录中的所有.asm文件,并对它们执行一些操作。
如何以有效的方式做到这一点?
我需要遍历给定目录中的所有.asm文件,并对它们执行一些操作。
如何以有效的方式做到这一点?
当前回答
Python 3.4及更高版本在标准库中提供了pathlib。你可以这样做:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
或者如果你不喜欢列表理解:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
路径对象可以很容易地转换为字符串。
其他回答
这将遍历所有子代文件,而不仅仅是目录的直接子代:
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)
我不明白为什么有些答案很复杂。这就是我使用Python 2.7的方法。用要使用的目录替换DIRECTORY_TO_LOOP。
import os
DIRECTORY_TO_LOOP = '/var/www/files/'
for root, dirs, files in os.walk(DIRECTORY_TO_LOOP, topdown=False):
for name in files:
print(os.path.join(root, name))
我对这个实现还不太满意,我希望有一个自定义构造函数来实现DirectoryIndex_make(next(os.walk(inputpath))),这样您就可以传递文件列表所需的路径。欢迎编辑!
import collections
import os
DirectoryIndex = collections.namedtuple('DirectoryIndex', ['root', 'dirs', 'files'])
for file_name in DirectoryIndex(*next(os.walk('.'))).files:
file_path = os.path.join(path, file_name)
您可以尝试使用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使用的规则查找与指定模式匹配的所有路径名,尽管结果以任意顺序返回。未执行波浪号扩展,但*、?、?,并且用[]表示的字符范围将被正确匹配。
Python 3.4及更高版本在标准库中提供了pathlib。你可以这样做:
from pathlib import Path
asm_pths = [pth for pth in Path.cwd().iterdir()
if pth.suffix == '.asm']
或者如果你不喜欢列表理解:
asm_paths = []
for pth in Path.cwd().iterdir():
if pth.suffix == '.asm':
asm_pths.append(pth)
路径对象可以很容易地转换为字符串。