我正在用Python的一个小程序苦苦挣扎,该程序旨在计算文本文件行中一组特定字符的出现次数。
举例来说,如果我想算“!”和以下行中的“ @”
hi!
hello@gmail.com
collection!
我期望以下输出:
!;2
@;1
到目前为止,我已经获得了功能代码,但是它效率低下,并且没有利用Python库所具有的潜力。
我尝试使用collections.counter,但效果有限。我发现的效率阻止程序是我无法在counter.update()上选择特定的字符集,发现的所有其余字符也都计算在内。然后我将不得不过滤我不感兴趣的字符,这又增加了一个循环...
我也考虑过正则表达式,但是在这种情况下我看不到任何优势。
这是我现在拥有的功能代码(我能想到的最简单的想法),它在文件行中查找特殊字符。我想看看是否有人可以提出一个更精巧的Python特定想法:
def count_special_chars(filename):
special_chars = list('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ ')
dict_count = dict(zip(special_chars, [0] * len(special_chars)))
with open(filename) as f:
for passw in f:
for c in passw:
if c in special_chars:
dict_count[c] += 1
return dict_count
谢谢检查
最佳答案
从collections.Counter
消除多余的计数可能都不重要,但是,如果它使您感到困扰,请在初始迭代期间执行:
from collections import Counter
special_chars = '''!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ '''
found_chars = [c for c in open(yourfile).read() if c in special_chars]
counted_chars = Counter(found_chars)