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

Bar*_*tee 38 python file-manager

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

我需要使用什么功能?

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

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

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

  • 正是我在寻找什么.更多知识与例子.我必须选择一个答案,但我将尝试和研究所有三个增加的概念. (2认同)

Ale*_*ton 21

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

[f for f in os.listdir(your_directory) if os.path.isfile(os.path.join(your_directory, f))]
Run Code Online (Sandbox Code Playgroud)

这将returnlist指定的文件名之一your_directory.

  • 这实际上不起作用,因为`f`是文件名,而不是完整路径.你需要`os.path.isfile(os.path.join(your_directory,f))`. (5认同)
  • 替代方案:`filter(os.path.isfile,os.listdir(your_directory))` (2认同)

小智 8

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

PS:os.getcwd()返回当前目录.


nag*_*lzs 7

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
Run Code Online (Sandbox Code Playgroud)