首页 > 解决方案 > 将过程应用于许多子目录中的文件

问题描述

我正在尝试将程序应用于数千个文件,但在许多子目录中。

我正在考虑os.listdir()首先列出所有子目录,而不是查看每个子目录并应用我的程序。我的树状如下:

              subdir1 -> file, file, file, .....
              subdir2 -> file, file, file, .....
Directory  -> subdir3 -> file, file, file, .....
              subdir4 -> file, file, file, .....
              subdir5 -> file, file, file, .....

我可以访问子目录列表,os.listdir()但不能访问子目录中的文件,你知道如何继续吗?谢谢

编辑:当使用 MikeH 方法时,在我的情况下:

import os
from astropy.io import fits

ROOT_DIR='./'

for dirName, subdirList, fileList in os.walk(ROOT_DIR):
    for fname in fileList:
        hdul = fits.open(fname)

我得到错误:

FileNotFoundError: [Errno 2] No such file or directory: 'lte08600-2.00+0.5.Alpha=+0.50.PHOENIX-ACES-AGSS-COND-2011-HiRes.fits'

事实上,如果我尝试检查文件上的路径,print(os.path.abspath(fname)我可以看到路径是错误的,它会错过像 /root/dir/fnam 这样的子目录而不是 root/dir/subdir/fname 这有什么问题?

EDIT2:就是这样,我发现出了什么问题,我必须加入文件的路径,os.path.join(dirName,fname)而不是fname每次都写入。谢谢 !

标签: python

解决方案


像这样的东西应该适合你:

import os
ROOT_DIR='./'

for dirName, subdirList, fileList in os.walk(ROOT_DIR):
    for fname in fileList:
        # fully qualified file name is ROOT_DIR/dirname/fname
        performFunction(dirName, fname)

推荐阅读