如何用Python读取文件夹中的文件数量?
我想知道怎么用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.listdir
和 os.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])
我从 这个讨论串 找到了一些这些想法。