如何在Python中仅列出目录下的常规文件(不包括目录)

如何在Python中仅列出目录下的常规文件(不包括目录),python,filesystems,Python,Filesystems,可以使用os.listdir('somedir')获取somedir下的所有文件。但是,如果我想要的只是常规文件(不包括目录),比如find的结果-在外壳下键入f 我知道,如果不是os.path.isdir('somedir/'+path'),可以使用[path for path in os.listdir('somedir')来获得与此相关问题类似的结果:。只是想知道是否有更简洁的方法可以做到这一点。您可以使用,它返回路径、文件夹和文件的元组: files = next(os.walk('so

可以使用
os.listdir('somedir')
获取
somedir
下的所有文件。但是,如果我想要的只是常规文件(不包括目录),比如
find的结果-在外壳下键入f

我知道,如果不是os.path.isdir('somedir/'+path'),可以使用
[path for path in os.listdir('somedir')来获得与此相关问题类似的结果:。只是想知道是否有更简洁的方法可以做到这一点。

您可以使用,它返回路径、文件夹和文件的元组:

files = next(os.walk('somedir'))[2]

如果您只想要顶级目录中的文件,那么前面的
os.walk
答案是完美的。但是,如果您也需要子目录的文件(la
find
),则需要处理每个目录,例如:

def find_files(path):
    for prefix, _, files in os.walk(path):
        for name in files:
            yield os.path.join(prefix, name)

现在,
list(find_files('.'))
是一个相同内容的列表
find-键入f-print
将为您提供(列表是因为find_文件是一个生成器,如果不明显的话)。

我有几种方法来完成这些任务。我无法评论解决方案的简洁性。FWIW这里是:

1.下面的代码将获取以.txt结尾的所有文件。您可能需要删除“.endswith”部分

2.这里的代码假设为函数提供了路径,并将所有.txt文件附加到列表中,如果路径中有子目录,则将这些子目录中的文件附加到子文件中

def readFilesNameList(self, path):
    basePath = path
    allfiles = []
    subfiles = []
    for root, dirs, files in os.walk(basePath):
      for f in files:
         if f.endswith('.txt'):
             allfiles.append(os.path.join(root,f))
             if root!=basePath:
                 subfiles.append(os.path.join(root, f))
我知道代码只是一个骨架,但我认为您可以了解总体情况。
如果你找到简洁的方法,就发帖子吧!:)

def readFilesNameList(self, path):
    basePath = path
    allfiles = []
    subfiles = []
    for root, dirs, files in os.walk(basePath):
      for f in files:
         if f.endswith('.txt'):
             allfiles.append(os.path.join(root,f))
             if root!=basePath:
                 subfiles.append(os.path.join(root, f))