仅使用python查找子目录中的文件

时间:2019-01-30 08:07:40

标签: python

我有一个父文件夹(PF)和子文件夹(CF1CF2CF3 ...),文件都位于父文件夹({{ 1}},PFf1.csv,...)和子文件夹(PFf2.csvCF1f1.csvCF1f2.csvCF2f1.csv,...)

我只想在子文件夹(CF2f2.csvCF1f1.csvCF1f2.csvCF2f1.csv,...)中找到文件,而忽略父文件中的文件文件夹。

我在stackoverflow和Internet中看到的所有示例都具有以下形式:

CF2f2.csv

也可以在父文件夹中找到文件。我尝试将修改为:

  • 在子文件夹中循环

  • 步行,测试新的父文件夹是否在子文件夹的原始列表中,然后跳转到if语句

但没有成功。我觉得这应该很容易,但是我是python新手,无法弄清楚。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您的循环为您提供了当前文件夹的路径,您可以检查它是否与rootDir不同(提供的rootDir是课程的完整路径):

for folder, subfolders, files in os.walk(rootDir):
    if folder != rootDir:
        for f in files:
            print(f)

答案 1 :(得分:2)

如果您想要的只是给定目录中目录中的文件,那么走路太多了。为此,我会写:

for name in os.listdir(base):
    if os.path.isdir(os.path.join(base, name)):
       for file in os.listdir(os.path.join(base, name)):
           if os.path.isfile(os.path.join(base, name, file)):
               print(os.path.join(base, name, file))

当然,有一些多余的os.path.join

答案 2 :(得分:0)

您可以首先使用os.listdir获取根目录中的所有子目录,然后使用os.path.isdir进行检查:

>>> from os import listdir
>>> from os.path import isfile, isdir, join

>>> root_dir = './PF'
>>> sub_dirs = [join(root_dir, dir) for dir in listdir(root_dir) if isdir(join(root_dir, dir))]
>>> sub_dirs
['./PF/CF2', './PF/CF1']

然后再次使用os.listdir遍历所有子目录以在其中获取文件。您可以使用os.path.isfile来检查文件:

>>> sub_dir_files = [f for subdir in sub_dirs for f in listdir(subdir) if isfile(join(subdir, f))]
>>> sub_dir_files
['CF2f2.txt', 'CF2f1.txt', 'CF1f2.txt', 'CF1f1.txt']
相关问题