首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >python计数文件和显示max

python计数文件和显示max
EN

Stack Overflow用户
提问于 2015-06-02 13:34:12
回答 5查看 192关注 0票数 3

我正在绑定到目录中的al文件扩展名。然后数数并显示其中有多少人在那里。做这个最好的方法是什么?这个脚本将非常大,所有的pdf= 0代码行。

此外,我如何显示输出有多少文件有,从高到低。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os

pdf = 0
doc = 0
docx = 0
xls = 0
xlsx = 0
ppt = 0
pptx = 0

for file in os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH"):
    if file.endswith(".pdf"):
        pdf += 1
        print(file)
    if file.endswith(".doc"):
        doc += 1
        print(file)
    if file.endswith(".docx"):
        docx += 1
        print(file)
    if file.endswith(".xls"):
        xls += 1
        print(file)
    if file.endswith(".xlsx"):
        xlsx += 1
        print(file)
    if file.endswith(".ppt"):
        ppt += 1
        print(file)
    if file.endswith(".pptx"):
        pptx += 1
        print(file)

print(pdf)
print(doc)
print(docx)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-06-02 13:46:59

你可以用字典:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os

exts = {}
my_exts = ('pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx')

for file in os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH"):
    ext = os.path.splitext(file)[1]
    if ext and ext[1:] in my_exts:
        exts[ext] = exts.get(ext, 0) + 1

print sorted(exts.items(), key=lambda x: x[1], reverse=True)

产出如下:

[('.doc', 4), ('.pdf', 2), ('.xlsx', 1)]

票数 1
EN

Stack Overflow用户

发布于 2015-06-02 13:39:38

这就是你使用collections.defaultdict的地方

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import defaultdict
import os.path

d = defaultdict(int)

for fname in os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH"):
    _, ext = os.path.splitext(fname)
    d[ext] += 1

然后你就会得到一本字典,它看起来像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'.pdf': 7,  # or however many...
 '.doc': 3,
 '.docx': 2, ...}

然后,您可以通过以下操作显示最常见的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
max(d, key=lambda k: d[k])
票数 6
EN

Stack Overflow用户

发布于 2015-06-02 13:41:36

您可以用这些格式替换文件名,然后使用collections.Counter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from colections import Counter
import re
print Counter([re.sub(r'.*\.(\w+'),r'\1',i) for i in  os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH")]

或者正如Adam提到的那样,您可以使用os.path.splitext(i)[1]而不是re.sub

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print Counter([os.path.splitext(i)[1] for i in  os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH")]

对于从高到低的显示,可以使用most_common方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count=Counter([re.sub(r'.*\.(\w+'),r'\1',i) for i in os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH")]
for i, j in count.most_common():
       print i,j
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30607022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文