如何修复错误

How to repair errors

<pre>import os, sys, codecs
from collections import defaultdict
letters = 'abcdefghijklmnopqrstuvwxyz'
bigLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def countLetters(file):
    results = defaultdict(int)
    for line in file:
        for char in line:
            if char.lower() in letters:
                c = char.lower()
                results[c] += 1
    return results

def main():
    file = codecs.open('szyfrogram.txt','r',encoding='utf-8')
    content = file.readlines()
    file.close()

    dictionary = countLetters(content)

    most_popular = (max(dictionary, key=dictionary.get))
    shift_for_a = 122 - ord(most_popular.lower()) + 1
    saveDecoded(content, shift_for_a,'results_decoded.txt')

def saveDecoded(encoded, shift,file_output):
    decoded = ''
    for line in encoded:
        line = line.strip('\n') 
        for char in line:
            decoded = decoded + move(char,shift)
    output = open(filr_output,mode = 'w')
    output.write(decoded)
    output.close

def move(letter,shift):
    moveletter = letter
    if letter in letters:
        lower_range = 96
        top_range = 122
        moveCharLetters = ord(letter) + shift
        if moveCharLetters > top_range:
            moveCharLetters = lower_range + moveCharLetters-top_range
            moveletter = chr(moveCharLetters)     
        else:
            moveletter = chr(moveCharLetters)    
    elif letter in bigLetters:
        lower_range = 64
        top_range = 90
        moveCharLetters = ord(letter) + shift
        if moveCharLetters > top_range:
            moveCharLetters = lower_range + moveCharLetters-top_range
            moveletter = chr(moveCharLetters)    
        else:
            moveletter = chr(moveCharLetters)       
    else:
        moveletter = letter
    return moveletter

print('countLetters')
main()<code>

回溯(最近调用最后): 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 61 行,位于 主要的() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\Rot14.py",第 18 行,在 main 中 内容 = file.readlines() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 706 行,在 readlines 中 return self.reader.readlines(尺寸提示) 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 615 行,在 readlines 中 数据 = self.read() 文件 "C:\Users\waldemar\AppData\Local\Programs\Python\Python35-32\lib\codecs.py",第 501 行,已读 newchars, decodebytes = self.decode(数据, self.errors) UnicodeDecodeError:'utf-8' 编解码器无法解码位置 28 中的字节 0xea:无效的连续字节

输入文件不是 UTF-8,否则您不会在 content = file.readlines() 上收到错误。

如果您将输入文件正确保存为 UTF-8,则另一个错误是需要将输出文件也写入 UTF-8:

output = open(file_output,mode = 'w', encoding='utf8')

那么输出文件包含:

Od godziny zerowej mam wachtę na Morzu Lewantyńskim.

另一件需要注意的事情是 codecs.open 不需要 Python 3。例如,输出文件只使用 Python 3 内置的 open.