在Python中,计算文件夹中文件的最优雅的方法是什么?
我对Python非常陌生,目前正在学习 正如标题所说:计算文件夹中文件的最优雅、简洁、高效和类似python的方法是什么 假设一个文件夹只包含文件,没有子文件夹 通过(天真地)运用我学到的知识,我得出了以下结论:在Python中,计算文件夹中文件的最优雅的方法是什么?,python,file,directory,numbers,Python,File,Directory,Numbers,我对Python非常陌生,目前正在学习 正如标题所说:计算文件夹中文件的最优雅、简洁、高效和类似python的方法是什么 假设一个文件夹只包含文件,没有子文件夹 通过(天真地)运用我学到的知识,我得出了以下结论: from os import walk num_files = -1 for (dir_path, dir_names, file_names) in walk(image_file_path): for fn in file_names: num_file
from os import walk
num_files = -1
for (dir_path, dir_names, file_names) in walk(image_file_path):
for fn in file_names:
num_files += 1
它看起来没有那么优雅,我意识到fn在整个迭代过程中都没有被使用。此外,num_files=-1是最不优雅的
那么,写这篇文章的更好方法是什么呢
提前感谢。请尝试列表理解
total_files = sum(len(dirData[2]) for dirData in walk(image_file_path))
我想说,以下是最具现代意义的答案:
从pathlib导入路径
路径=路径(图像\文件\路径)
num_files=sum(如果x.是_file(),则path.iterdir()中的x为1)
就我个人而言,我喜欢glob
:
从全局导入全局
num_files=len(glob(dir_name.rstrip('/')+'/*'))
您可以尝试os.listdir
import os
len(os.listdir(image_file_path))
您可以通过如下方式获取spesific路径中的所有文件和文件夹来完成此操作os.listdir(“./”)
。然后使用列表理解过滤所有文件,如下所示[i for i in os.listdir(“./”)if os.path.isfile(i)]
。最后,计算一下列表中的对象。如果我们把它放在一起,它看起来像这样len([i代表os.listdir中的i(“./”)如果os.path.isfile(i)])
OP的原始代码比这个建议更像pythonic/惯用语,部分原因是这个代码甚至不起作用。你是说walk('.')中的[code>sum([len(file_name)for(dir_path,dir_name,file_name)]
?@DeepSpace我只是建议使用一种单行线,仅此而已。但它不起作用。它试图对函数列表求和。@谢谢,有一个错误,已修复并更新。它现在应该可以工作了。这比,比如说,len(os.listdir(image\u file\u path))
更具Pythonic意味着什么呢?@DeepSpacepathlib
是一种比os
更现代的方法。另外,如果OP假设不存在子文件夹,则给出了错误的答案。@orlp,为什么不sum(x.is_file()代表path.iterdir()中的x)
?@OlvinRoght,这会起作用,也许在另一天我会写下它。有些人对隐式bool->int转换有点不确定。@orlp,啊,我认为这与性能测试有关!glob和os有什么区别?一个比另一个更现代吗?@Polcioglob
实际上是用来搜索带有正则表达式的文件的。使用*
,我要求它列出所有文件。你可以自定义模式,只获取你想要的文件。太棒了,谢谢,真的很有用谢谢!超级干净。@Polcio,请注意,os.listdir()
返回带文件名的列表,而不是文件的完整路径。os.listdir()
只返回不带根目录的文件名,所以只有在从带文件的同一目录执行脚本时,代码才能工作。或者,您可以使用os.scandir()
:sum(map(os.path.isfile,os.scandir(“./”))
。