Python中isfile和listdir之间的分歧

时间:2016-04-07 05:05:03

标签: python directory

filter(os.path.isfile,os.listdir('DIRECTORY'))

返回与:

不同的结果
os.listdir('DIRECTORY')

在CSV文件的目录中,listdir命令返回一组文件(如预期的那样),但过滤器不返回任何内容(意外)

2 个答案:

答案 0 :(得分:0)

os.listdir(path) #will return all content of that folder


filter(os.path.isfile, os.listdir(path)) # will return only list of files
filter(os.path.isdir, os.listdir(path))  # will return only list of directories

答案 1 :(得分:0)

os.listdir()返回包含路径的文件名列表。这意味着os.listdir("/home/zondo")可能会["dir1", "file1", "file2"]。现在让我们说我们在dir1执行此命令时。我们首先看看dir1是否存在。它没有filter()移动到下一个。为什么它不存在?因为我们没有提供绝对的路径;我们提供了一条相对路径。由于我们在dir1os.path.isfile()正在查看/home/zondo/dir1/dir1是否为文件。当然不是;它不存在。你需要提供它的路径。您可以使用lambda函数:

filter(lambda x: os.path.isfile(os.path.join(dir, x)), os.listdir("DIRECTORY"))

在这种情况下使用列表理解可能会更好:

[x for x in os.listdir("DIRECTORY") if os.path.isfile(os.path.join(dir, x))]