我有一个.txt文件,我需要计算其中所有字符的频率,以便对我的密码练习进行简单的频率分析。
我认为代码可以正常工作,但是Python似乎无法读取Ä,Ö,ß等字符(德语字母)。当代码正在读取.txt文件时,我认为它是utf8格式。
这是输出:
Counter({' ': 168, 'S': 136, '\xc3': 103, 'Z': 83, 'G': 80, 'P': 80,
'W': 76, 'J': 66, 'O': 63, 'Q': 62, 'R': 57, 'U': 57, 'L': 47, '\x84': 43,
'K': 39, '\x9c': 28, 'X': 25, 'A': 23, 'C': 22, '\x9f': 18, 'E': 17, 'N':
17, '\x96': 14, ',': 11, 'D': 8, 'Y': 8, 'T': 6, 'V': 6, 'B': 5, '"': 4,
"'": 3, 'F': 2, 'M': 2, '!': 1, '-': 1, '?': 1}) [Finished in 0.1s]
我的问题是如何解释反斜杠字符,例如'\ xc3'等。我在网上找不到有关如何翻译的任何内容?
编辑(我的代码):
from collections import Counter
with open('/Users/StB/Downloads/text.txt') as f:
c = Counter()
for x in f:
c += Counter(x.strip())
print c
编辑2:
新输出:
Counter({' ': 168, 'S': 136, 'Z': 83, 'P': 80, 'G': 80, 'W': 76, 'J': 66, 'O': 63, 'Q': 62, 'R': 57, 'U': 57, 'L': 47, 'Ä': 43, 'K': 39, 'Ü': 28, 'X': 25, 'A': 23, 'C': 22, 'ß': 18, 'N': 17, 'E': 17, 'Ö': 14, ',': 11, 'Y': 8, 'D': 8, 'T': 6, 'V': 6, 'B': 5, '"': 4, "'": 3, 'F': 2, 'M': 2, '-': 1, '!': 1, '?': 1})
新代码:
from collections import Counter
with open('/Users/StB/Downloads/text.txt', encoding= 'utf - 8') as f:
c = Counter()
for x in f:
c += Counter(x.strip())
print (c)
endcoding不适用于我在崇高的文本上运行的版本。在IDLE中工作正常!
答案 0 :(得分:1)
对于Python 2,您将需要将要读取的字符串显式解码为Unicode。您也可以使用Counter.update
方法来避免创建和丢弃Counter
对象。
from collections import Counter
with open('/Users/StB/Downloads/text.txt') as f:
c = Counter()
for x in f:
c.update(x.decode('utf-8').strip())
print c