我正在绑定到目录中的al文件扩展名。然后数数并显示其中有多少人在那里。做这个最好的方法是什么?这个脚本将非常大,所有的pdf= 0
代码行。
此外,我如何显示输出有多少文件有,从高到低。
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)
发布于 2015-06-02 13:46:59
你可以用字典:
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)]
发布于 2015-06-02 13:39:38
这就是你使用collections.defaultdict
的地方
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
然后你就会得到一本字典,它看起来像:
{'.pdf': 7, # or however many...
'.doc': 3,
'.docx': 2, ...}
然后,您可以通过以下操作显示最常见的内容:
max(d, key=lambda k: d[k])
发布于 2015-06-02 13:41:36
您可以用这些格式替换文件名,然后使用collections.Counter
:
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
print Counter([os.path.splitext(i)[1] for i in os.listdir("C:\\Users\\joey\\Desktop\\school\\ICOMMH")]
对于从高到低的显示,可以使用most_common
方法:
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
https://stackoverflow.com/questions/30607022
复制相似问题