我试图用路径计算以特定扩展名(用户将通过)结束的所有文件。我们也有子文件夹,因此搜索必须是递归的。
下面是我正在尝试,但它正在抛出错误。请说明差距在哪里。
如果我删除if file.endswith(extension):
行,则它会提供所有文件的计数(包括所有扩展名的文件)
import os, sys
def fileCount(path, extension):
count = 0
for root, dirs, file in os.walk(path):
if file.endswith(extension):
count += len(file)
return count
print fileCount('/home/export/JobDefinition', '.car')
以下是输出:
$ python test.py
Traceback (most recent call last):
File "test.py", line 11, in <module>
print fileCount('/home/export/JobDefinition', '.car')
File "test.py", line 6, in fileCount
if file.endswith(extension):
AttributeError: 'list' object has no attribute 'endswith'
答案 0 :(得分:2)
您希望在过滤所有文件后得到总和:
def fileCount(path, extension):
count = 0
for root, dirs, files in os.walk(path):
count += sum(f.endswith(extension) for f in files)
return count
files
会返回一个文件列表,因此sum(f.endswith(extension) for f in files)
将为您提供以给定扩展名结尾的所有文件的计数。
或者只返回所有的总和:
def fileCount(path, extension):
return sum(f.endswith(extension) for root, dirs, files in os.walk(path) for f in files)
答案 1 :(得分:1)
os.walk()
用于遍历文件 S 。
您必须循环浏览 S 文件,该文件以list
的形式返回。
def fileCount(path, extension):
count = 0
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(extension):
count += 1
return count
答案 2 :(得分:1)
os.walk()
会返回一个像 - (dirpath, dirnames, filenames)
这样的元组。其中filenames
是目录中所有文件的列表,其中为list
。
您需要迭代文件,而不是使用file.endswith
示例 -
import os, sys
def fileCount(path, extension):
count = 0
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(extension):
count += 1
return count
print fileCount('/home/export/JobDefinition', '.car')
答案 3 :(得分:1)
这是一个单线替代方案:
import os
def fileCount(path, extension):
return sum([1 for root, dirs, files in os.walk(path) for file in files if file.endswith(extension)])
print fileCount('/home/export/JobDefinition', '.car')
答案 4 :(得分:0)
formatDateFunctionPointer.call(ejsScope, ...);
的第三个返回值是文件名列表。