如何在Python中列出目录的内容?


Answers:



52

单程:

import os
os.listdir("/home/username/www/")

另一种方式

glob.glob("/home/username/www/*")

在这里找到示例

glob.glob上面的方法不会列出隐藏文件。

自从几年前我最初回答这个问题以来,pathlib已添加到Python。我现在列出目录的首选方法通常涉及对象的iterdir方法Path

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

当与glob.glob一起使用时,是否会列出隐藏文件(我假设您是指.XYZUnix文件系统上下文中的文件)glob.glob("/home/username/www/.*")
安迪·芬肯斯塔特

是的,我的意思是文件以点开头。您提供的示例适用于匹配隐藏文件(并且仅适用于隐藏文件)。
Trey Hunner,2012年

我只是导入了glob并使用了glob.glob(r'c:\ users'),但它只返回了['c:\\users']
Musixauce3000

1
@ Musixauce3000:您会想要做的glob.glob(r'c:\users\*')(它实际上并没有列出目录,但是会扩展星号,从而完成类似的任务)。
Trey Hunner '16

38

os.walk 如果需要递归可以使用:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)


14

os模块处理所有这些东西。

os.listdir(path)

返回一个列表,其中包含由path给出的目录中条目的名称。该列表是任意顺序的。它不包括特殊条目“。” 和“ ..”,即使它们存在于目录中。

可用性:Unix,Windows。


4

在Python 3.4+中,您可以使用新pathlib软件包:

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()返回一个迭代器,可以很容易地将其变成list

contents = list(Path('.').iterdir())

3

从Python 3.5开始,您可以使用os.scandir

区别在于它返回文件条目而不是名称。在某些操作系统(例如Windows)上,这意味着您不必os.path.isdir/file知道它是否是文件,并且可以节省CPU时间,因为stat在Windows中扫描目录时已完成此操作:

列出目录并打印大于max_value字节的文件的示例:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

在此处阅读基于性能的详尽答案)


2

下面的代码将列出目录和目录中的文件。另一个是os.walk

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.