Python - 如何在os.listdir中查找文件和跳过目录

时间:2014-03-05 19:59:35

标签: python file-manager

我使用os.listdir并且它工作正常,但我也在列表中获得了子目录,这不是我想要的:我只需要文件。

我需要使用哪种功能?

我也看了os.walk,这似乎是我想要的,但我不确定它是如何工作的。

7 个答案:

答案 0 :(得分:44)

您需要过滤掉目录; os.listdir()列出给定路径中的所有名称。您可以使用os.path.isdir()

basepath = '/path/to/directory'
for fname in os.listdir(basepath):
    path = os.path.join(basepath, fname)
    if os.path.isdir(path):
        # skip directories
        continue

os.walk()做同样的工作;除非你需要递归子目录,否则你不需要在这里使用os.walk()

答案 1 :(得分:18)

这是一个很好的小单行,以列表理解的形式出现:

[f for f in os.listdir(your_directory) if os.path.isfile(os.path.join(your_directory, f))]

这将return list个指定your_directory内的{{1}}个文件名。

答案 2 :(得分:8)

import os
directoryOfChoice = "C:\\" # Replace with a directory of choice!!!
filter(os.path.isfile, os.listdir(directoryOfChoice))

P.S: os.getcwd()返回当前目录。

答案 3 :(得分:4)

for fname in os.listdir('.'):
    if os.path.isdir(fname):
       pass  # do your stuff here for directory
    else:
       pass  # do your stuff here for regular file

答案 4 :(得分:2)

使用os.walk()的解决方案是:

for r, d, f in os.walk('path/to/dir'):
    for files in f:
       # This will list all files given in a particular directory

答案 5 :(得分:0)

即使这是一篇较旧的文章,也请允许我添加3.4中引入的pathlib库,该库提供了OOP风格的处理目录和文件的完整性。要获取目录中的所有文件,可以使用

def get_list_of_files_in_dir(directory: str, file_types: str ='*') -> list:
    return [f for f in Path(directory).glob(file_types) if f.is_file()]

按照您的示例,您可以像这样使用它:

mypath = '/path/to/directory'
files = get_list_of_files_in_dir(mypath)

如果根据文件扩展名只需要一部分文件(例如“仅csv文件”),则可以使用:

files = get_list_of_files_in_dir(mypath, '*.csv')

答案 6 :(得分:0)

注意 PEP 471 DirEntry 对象属性是:is_dir(*, follow_symlinks=True)

所以...

from os import scandir
folder = '/home/myfolder/'
for entry in scandir(folder):
    if entry.is_dir():
        # do code or skip
        continue
    myfile = folder + entry.name
    #do something with myfile