如何用Python读取文件夹中的文件数量?

24 投票
9 回答
56383 浏览
提问于 2025-04-16 05:08

我想知道怎么用Python来读取一个特定文件夹里的文件数量。能给个示例代码就太好了!

9 个回答

7

你可以使用 glob 这个模块:

>>> import glob
>>> print len(glob.glob('/tmp/*'))
10

或者,正如Mark Byers在他的回答中提到的,如果你只想要文件的话:

>>> print [f for f in glob.glob('/tmp/*') if os.path.isfile(f)]
['/tmp/foo']
>>> print sum(os.path.isfile(f) for f in glob.glob('/tmp/*'))
1
26

pathlib是从3.4版本开始新增的一个功能,它让文件路径的处理变得更简单。标记为1的那行代码会列出当前文件夹里的所有文件,但不会深入到子文件夹里;而标记为2的那行代码则会列出当前文件夹及其所有子文件夹里的文件。

from pathlib import Path

import os
os.chdir('c:/utilities')

print (len(list(Path('.').glob('*')))) ## 1
print (len(list(Path('.').glob('**/*')))) ## 2

还有更多好用的功能。通过这些额外的代码,你可以看到那些是文件的项目的绝对路径和相对路径。

for item in Path('.').glob('*'):
    if item.is_file():
        print (str(item), str(item.absolute()))

结果:

boxee.py c:\utilities\boxee.py
boxee_user_catalog.sqlite c:\utilities\boxee_user_catalog.sqlite
find RSS.py c:\utilities\find RSS.py
MyVideos34.sqlite c:\utilities\MyVideos34.sqlite
newsletter-1 c:\utilities\newsletter-1
notes.txt c:\utilities\notes.txt
README c:\utilities\README
saveHighlighted.ahk c:\utilities\saveHighlighted.ahk
saveHighlighted.ahk.bak c:\utilities\saveHighlighted.ahk.bak
temp.htm c:\utilities\temp.htm
to_csv.py c:\utilities\to_csv.py
33

如果你想要统计文件和文件夹的数量,但不想深入到子文件夹里,可以使用 os.listdir 这个方法,然后计算它返回的列表的长度。

如果你想要统计所有文件和文件夹,包括子文件夹里的内容,可以用 os.walk,这个方法会帮你遍历目录下的所有文件和子文件夹。

如果你只想统计文件,不想统计文件夹,可以用 os.listdiros.path.isfile 来检查每个条目是不是文件:

import os.path
path = '.'
num_files = len([f for f in os.listdir(path)
                if os.path.isfile(os.path.join(path, f))])

另外,你也可以使用生成器来实现:

num_files = sum(os.path.isfile(os.path.join(path, f)) for f in os.listdir(path))

或者你可以这样使用 os.walk

len(os.walk(path).next()[2])

我从 这个讨论串 找到了一些这些想法。

撰写回答