如何迭代给定目录中的文件?

2022-09-05 01:19:05

我需要循环访问给定目录中的所有文件,并对它们执行一些操作。.asm

如何以有效的方式做到这一点?


答案 1

Python 3.6版本上面的答案,使用os-假设你有目录路径作为对象的变量,叫做:strdirectory_in_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 替换glob('**/*.asm')rglob('*.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 filename in os.listdir("/path/to/dir/"):
    if filename.endswith(".asm") or filename.endswith(".py"): 
         # print(os.path.join(directory, filename))
        continue
    else:
        continue

答案 2

这将遍历所有后代文件,而不仅仅是目录的直接子级:

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)