如何在python中计算目录中具有两种扩展名的文件数?
我有一个包含几种类型文件的目录。 如何计算具有两种扩展名(.txt和.csv)的目录中的文件数?如何在python中计算目录中具有两种扩展名的文件数?,python,Python,我有一个包含几种类型文件的目录。 如何计算具有两种扩展名(.txt和.csv)的目录中的文件数? 在我的搜索中,我发现了如何只使用一个特定的扩展名进行计数假设path是您文件夹的路径。然后 import os # get list of files list_of_files = os.listdir(path) # txt files num_txt = len([x for x in list_of_files if x.endswith(".txt")]) # csv files nu
在我的搜索中,我发现了如何只使用一个特定的扩展名进行计数假设
path
是您文件夹的路径。然后
import os
# get list of files
list_of_files = os.listdir(path)
# txt files
num_txt = len([x for x in list_of_files if x.endswith(".txt")])
# csv files
num_csv = len([x for x in list_of_files if x.endswith(".csv")])
假设
path
是文件夹的路径。然后
import os
# get list of files
list_of_files = os.listdir(path)
# txt files
num_txt = len([x for x in list_of_files if x.endswith(".txt")])
# csv files
num_csv = len([x for x in list_of_files if x.endswith(".csv")])
Yilun答案的一个更好的变体(已经很不错了,因为它不会像
len(glob.glob(*.csv”))
和len(glob.glob(*.txt”)
那样扫描目录两次)
不使用sum
(布尔值被求和为0或1)和生成器创建额外列表(更快):
import os
# get list of files
list_of_files = os.listdir(path)
# txt files
num_txt = sum(x.endswith(".txt") for x in list_of_files)
# csv files
num_csv = sum(x.endswith(".csv") for x in list_of_files)
gencomps+sum很酷,但它仍然在文件列表上循环/测试两次。好的旧循环毕竟没有那么糟糕(至少它扫描了一次和快捷方式):
顺便说一句,要同时计算这两个参数,请使用endswith的tuple param功能
# csv & txt files
num_txt_csv = sum(x.endswith((".csv",".txt")) for x in list_of_files)
Yilun答案的一个更好的变体(已经很不错了,因为它不会像len(glob.glob(*.csv”))
和len(glob.glob(*.txt”)
那样扫描目录两次)
不使用sum
(布尔值被求和为0或1)和生成器创建额外列表(更快):
import os
# get list of files
list_of_files = os.listdir(path)
# txt files
num_txt = sum(x.endswith(".txt") for x in list_of_files)
# csv files
num_csv = sum(x.endswith(".csv") for x in list_of_files)
gencomps+sum很酷,但它仍然在文件列表上循环/测试两次。好的旧循环毕竟没有那么糟糕(至少它扫描了一次和快捷方式):
顺便说一句,要同时计算这两个参数,请使用endswith的tuple param功能
# csv & txt files
num_txt_csv = sum(x.endswith((".csv",".txt")) for x in list_of_files)
您可以使用regex筛选文件名:
import os
import re
txt_or_csv = [f for f in os.listdir(path) if re.search(r'.*\.(txt|csv)$', f)]
print(len(txt_or_csv))
您可以使用regex筛选文件名:
import os
import re
txt_or_csv = [f for f in os.listdir(path) if re.search(r'.*\.(txt|csv)$', f)]
print(len(txt_or_csv))
使用os.walk(dir)
使用os.walk(dir)
你是说python 3.6?早期版本有一个scandir
后端口模块。对于scandir
/行走
/任何在非常特殊的情况下速度更快的东西:1)windows 2)如果需要对对象执行统计
。在其他情况下,它不会更快。此外,问题是关于“目录中的文件”<代码>漫游
也扫描子目录(因此速度较慢)你是说python 3.6?早期版本有一个scandir
后端口模块。对于scandir
/行走
/任何在非常特殊的情况下速度更快的东西:1)windows 2)如果需要对对象执行统计
。在其他情况下,它不会更快。此外,问题是关于“目录中的文件”<代码>行走
也扫描子曲面(因此速度较慢)完美!工作得很漂亮。谢谢@让·弗朗索瓦·法布1。Regex是我想到的第一个工具,它灵活而且值得掌握。2.我添加了$
以排除.csvx
,感谢您指出这一点。3.我创建一个列表是因为列表理解很方便。我注意到你的回答也以一种含蓄的方式创建了一个列表。事实上,你的名单更大。我可以更改为sum(如果重新搜索(r'.*\.(txt | csv)$,f),则os.listdir(path)中的f为True)
。4.我选择regex是因为我不知道endswith
函数,也不知道您的答案中显示的元组参数用法,我认为它很棒,更像python。感谢您的评论,我学到了很多:在Cpython源代码中使用DI搜索endswith
,并找到许多使用它匹配文件名后缀的案例。太棒了!工作得很漂亮。谢谢@让·弗朗索瓦·法布1。Regex是我想到的第一个工具,它灵活而且值得掌握。2.我添加了$
以排除.csvx
,感谢您指出这一点。3.我创建一个列表是因为列表理解很方便。我注意到你的回答也以一种含蓄的方式创建了一个列表。事实上,你的名单更大。我可以更改为sum(如果重新搜索(r'.*\.(txt | csv)$,f),则os.listdir(path)中的f为True)
。4.我选择regex是因为我不知道endswith
函数,也不知道您的答案中显示的元组参数用法,我认为它很棒,更像python。感谢您的评论,我学到了很多:在Cpython源代码中使用DI搜索endswith
,并找到许多使用它匹配文件名后缀的案例。