Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,计算文件夹中文件的最优雅的方法是什么?_Python_File_Directory_Numbers - Fatal编程技术网

在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

我对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_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意味着什么呢?@DeepSpace
pathlib
是一种比
os
更现代的方法。另外,如果OP假设不存在子文件夹,则给出了错误的答案。@orlp,为什么不
sum(x.is_file()代表path.iterdir()中的x)
?@OlvinRoght,这会起作用,也许在另一天我会写下它。有些人对隐式bool->int转换有点不确定。@orlp,啊,我认为这与性能测试有关!glob和os有什么区别?一个比另一个更现代吗?@Polcio
glob
实际上是用来搜索带有正则表达式的文件的。使用
*
,我要求它列出所有文件。你可以自定义模式,只获取你想要的文件。太棒了,谢谢,真的很有用谢谢!超级干净。@Polcio,请注意,
os.listdir()
返回带文件名的列表,而不是文件的完整路径。
os.listdir()
只返回不带根目录的文件名,所以只有在从带文件的同一目录执行脚本时,代码才能工作。或者,您可以使用
os.scandir()
sum(map(os.path.isfile,os.scandir(“./”))