我正在用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)

10-07 16:45
查看更多