如何使用Python计算目录中的文件数量

如何在目录中只计算文件 ?这将目录本身计算为一个文件:

len(glob.glob('*'))
621001 次浏览

os.listdir()将比使用glob.glob更有效。要测试文件名是否为普通文件(而不是目录或其他实体),请使用os.path.isfile():

import os, os.path


# simple version for working with CWD
print len([name for name in os.listdir('.') if os.path.isfile(name)])


# path joining version for other paths
DIR = '/tmp'
print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])

它使用os.listdir,适用于任何目录:

import os
directory = 'mydirpath'


number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])

这可以用一个生成器来简化,用以下方法可以更快一点:

import os
isfile = os.path.isfile
join = os.path.join


directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))
def count_em(valid_path):
x = 0
for root, dirs, files in os.walk(valid_path):
for f in files:
x = x+1
print "There are", x, "files in this directory."
return x

取自这篇文章

import os


def count_files(in_directory):
joiner= (in_directory + os.path.sep).__add__
return sum(
os.path.isfile(filename)
for filename
in map(joiner, os.listdir(in_directory))
)


>>> count_files("/usr/lib")
1797
>>> len(os.listdir("/usr/lib"))
2049
import os


_, _, files = next(os.walk("/usr/lib"))
file_count = len(files)

卢克的代码重新格式化。

import os


print len(os.walk('/usr/lib').next()[2])
def directory(path,extension):
list_dir = []
list_dir = os.listdir(path)
count = 0
for file in list_dir:
if file.endswith(extension): # eg: '.txt'
count += 1
return count

这就是fnmatch非常方便的地方:

import fnmatch


print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))

更多详细信息:http://docs.python.org/2/library/fnmatch.html

import os
print len(os.listdir(os.getcwd()))
import os


total_con=os.listdir('<directory path>')


files=[]


for f_n in total_con:
if os.path.isfile(f_n):
files.append(f_n)




print len(files)

如果您将使用操作系统的标准shell,则可以比使用纯python方式更快地获得结果。

Windows示例:

import os
import subprocess


def get_num_files(path):
cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path
return int(subprocess.check_output(cmd, shell=True))

我找到了另一个可能是正确的公认答案。

for root, dirs, files in os.walk(input_path):
for name in files:
if os.path.splitext(name)[1] == '.TXT' or os.path.splitext(name)[1] == '.txt':
datafiles.append(os.path.join(root,name))




print len(files)

对于所有类型的文件,包括子目录(Python 2):

import os


lst = os.listdir(directory) # your directory path
number_files = len(lst)
print number_files

只有文件(避免子目录):

import os


onlyfiles = next(os.walk(directory))[2] #directory is your directory path as string
print len(onlyfiles)

下面是一个简单的单行命令,我觉得很有用:

print int(os.popen("ls | wc -l").read())

我使用glob.iglob的目录结构类似于

data
└───train
│   └───subfolder1
│   |   │   file111.png
│   |   │   file112.png
│   |   │   ...
│   |
│   └───subfolder2
│       │   file121.png
│       │   file122.png
│       │   ...
└───test
│   file221.png
│   file222.png

以下两个选项都返回4(正如预期的那样,即不计算子文件夹本身)

  • len(list(glob.iglob("data/train/*/*.png", recursive=True)))
  • sum(1 for i in glob.iglob("data/train/*/*.png"))

我这样做了,这返回了文件夹(Attack_Data)中的文件数量…这很好。

import os
def fcount(path):
#Counts the number of files in a directory
count = 0
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)):
count += 1


return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder
print (fcount(path))

我很惊讶没有人提到os.scandir:

def count_files(dir):
return len([1 for x in list(os.scandir(dir)) if x.is_file()])

如果你想计算目录中的所有文件——包括子目录中的文件,最python的方法是:

import os


file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)

我们使用sum,它比显式地添加文件计数(等待时间)更快。

很简单:

print(len([iq for iq in os.scandir('PATH')]))

它只是简单地计算目录中的文件数量,我使用了列表理解技术来遍历特定目录,返回所有文件。"len(返回列表)"返回文件数。

虽然我同意@DanielStutzbach提供的答案:os.listdir()将比使用glob.glob更有效。

然而,一个额外的精度,如果你想计算文件夹中特定文件的数量,你想使用len(glob.glob())。例如,如果你要计算你想要使用的文件夹中的所有pdf文件:

pdfCounter = len(glob.glob1(myPath,"*.pdf"))

我解决了这个问题,同时通过谷歌Colab计算谷歌驱动器目录中的文件数量,通过将自己定向到目录文件夹by

import os
%cd /content/drive/My Drive/
print(len([x for x in os.listdir('folder_name/']))

普通用户可以尝试

 import os
cd Desktop/Maheep/
print(len([x for x in os.listdir('folder_name/']))

一行和递归:

def count_files(path):
return sum([len(files) for _, _, files in os.walk(path)])


count_files('path/to/dir')

一个答案与pathlib和没有加载到内存的整个列表:

from pathlib import Path


path = Path('.')


print(sum(1 for _ in path.glob('*')))  # Files and folders, not recursive
print(sum(1 for _ in path.glob('**/*')))  # Files and folders, recursive


print(sum(1 for x in path.glob('*') if x.is_file()))  # Only files, not recursive
print(sum(1 for x in path.glob('**/*') if x.is_file()))  # Only files, recursive

简短而简单

import os
directory_path = '/home/xyz/'
No_of_files = len(os.listdir(directory_path))

我写的一个简单的实用函数,它使用os.scandir()而不是os.listdir()

import os


def count_files_in_dir(path: str) -> int:
file_entries = [entry for entry in os.scandir(path) if entry.is_file()]


return len(file_entries)

主要的好处是,对os.path.is_file()的需求被消除,并被os.DirEntry实例的is_file()所取代,这也消除了对os.path.join(DIR, file_name)的需求,如其他答案所示。

这是一个简单的解决方案,可以计算包含子文件夹的目录中的文件数量。它可能会派上用场:

import os
from pathlib import Path


def count_files(rootdir):
'''counts the number of files in each subfolder in a directory'''
for path in pathlib.Path(rootdir).iterdir():
if path.is_dir():
print("There are " + str(len([name for name in os.listdir(path) \
if os.path.isfile(os.path.join(path, name))])) + " files in " + \
str(path.name))
            

 

count_files(data_dir) # data_dir is the directory you want files counted.

你应该得到一个类似这样的输出(当然,占位符改变了):

There are {number of files} files in {name of sub-folder1}
There are {number of files} files in {name of sub-folder2}

转换为列表后,您可以Len

len(列表(glob.glob(“*”)))

简单的一个:

import os
number_of_files = len(os.listdir(directory))
print(number_of_files)

我发现有时我不知道是否会收到文件名或文件的路径。所以我打印了os walk解决方案的输出:

def count_number_of_raw_data_point_files(path: Union[str, Path], with_file_prefix: str) -> int:
import os
path: Path = force_expanduser(path)


_, _, files = next(os.walk(path))
# file_count = len(files)
filename: str
count: int = 0
for filename in files:
print(f'-->{filename=}')  # e.g. print -->filename='data_point_99.json'
if with_file_prefix in filename:
count += 1
return count

:

-->filename='data_point_780.json'
-->filename='data_point_781.json'
-->filename='data_point_782.json'
-->filename='data_point_783.json'
-->filename='data_point_784.json'
-->filename='data_point_785.json'
-->filename='data_point_786.json'
-->filename='data_point_787.json'
-->filename='data_point_788.json'
-->filename='data_point_789.json'
-->filename='data_point_79.json'
-->filename='data_point_790.json'
-->filename='data_point_791.json'
-->filename='data_point_792.json'
-->filename='data_point_793.json'
-->filename='data_point_794.json'
-->filename='data_point_795.json'
-->filename='data_point_796.json'
-->filename='data_point_797.json'
-->filename='data_point_798.json'
-->filename='data_point_799.json'
-->filename='data_point_8.json'
-->filename='data_point_80.json'
-->filename='data_point_800.json'
-->filename='data_point_801.json'
-->filename='data_point_802.json'
-->filename='data_point_803.json'
-->filename='data_point_804.json'
-->filename='data_point_805.json'
-->filename='data_point_806.json'
-->filename='data_point_807.json'
-->filename='data_point_808.json'
-->filename='data_point_809.json'
-->filename='data_point_81.json'
-->filename='data_point_810.json'
-->filename='data_point_811.json'
-->filename='data_point_812.json'
-->filename='data_point_813.json'
-->filename='data_point_814.json'
-->filename='data_point_815.json'
-->filename='data_point_816.json'
-->filename='data_point_817.json'
-->filename='data_point_818.json'
-->filename='data_point_819.json'
-->filename='data_point_82.json'
-->filename='data_point_820.json'
-->filename='data_point_821.json'
-->filename='data_point_822.json'
-->filename='data_point_823.json'
-->filename='data_point_824.json'
-->filename='data_point_825.json'
-->filename='data_point_826.json'
-->filename='data_point_827.json'
-->filename='data_point_828.json'
-->filename='data_point_829.json'
-->filename='data_point_83.json'
-->filename='data_point_830.json'
-->filename='data_point_831.json'
-->filename='data_point_832.json'
-->filename='data_point_833.json'
-->filename='data_point_834.json'
-->filename='data_point_835.json'
-->filename='data_point_836.json'
-->filename='data_point_837.json'
-->filename='data_point_838.json'
-->filename='data_point_839.json'
-->filename='data_point_84.json'
-->filename='data_point_840.json'
-->filename='data_point_841.json'
-->filename='data_point_842.json'
-->filename='data_point_843.json'
-->filename='data_point_844.json'
-->filename='data_point_845.json'
-->filename='data_point_846.json'
-->filename='data_point_847.json'
-->filename='data_point_848.json'
-->filename='data_point_849.json'
-->filename='data_point_85.json'
-->filename='data_point_850.json'
-->filename='data_point_851.json'
-->filename='data_point_852.json'
-->filename='data_point_853.json'
-->filename='data_point_86.json'
-->filename='data_point_87.json'
-->filename='data_point_88.json'
-->filename='data_point_89.json'
-->filename='data_point_9.json'
-->filename='data_point_90.json'
-->filename='data_point_91.json'
-->filename='data_point_92.json'
-->filename='data_point_93.json'
-->filename='data_point_94.json'
-->filename='data_point_95.json'
-->filename='data_point_96.json'
-->filename='data_point_97.json'
-->filename='data_point_98.json'
-->filename='data_point_99.json'
854

注意,你可能需要排序。